第一篇:visualbasic程序設計教程-第四版-劉炳文編著-清華大學
Visual Basic 程序設計教程 部分習題參考
第四版劉炳文編著清華大學出版社 第五章
5.4、從鍵盤上輸入4個數,編寫程序,計算并輸出這4個數的和及平均值。通過inputbox函數輸入數據,在窗體上顯示和及平均值。Dim a as single For i=1 to 4
a=inputbox(“請輸入一個數:”,“數據輸入”)
sum=sum+a
n=n+1
avg=sum/n next i print “和是:”,sum print “平均值是:”,avg 5.5、編寫程序,要求用戶輸入下列信息:姓名、年齡、通信地址、郵政編碼、電話,然后將輸入的數據用適當的格式在窗體上顯示出來。Dim a as variant Fontsize=20 a=inputbox(“請輸入姓名:”,“數據輸入”)print “姓名:”;a a=inputbox(“請輸入年齡:”,“數據輸入”)print “年齡:”;a a=inputbox(“請輸入通信地址:”,“數據輸入”)print “通信地址:”;a a=inputbox(“請輸入郵政編碼:”,“數據輸入”)print “郵政編碼:”;a a=inputbox(“請輸入電話:”,“數據輸入”)print “電話:”;a 5.7.設a=5,b=2.5,c=7.8,編程序計算:
y=(πab)/(a+bc)程序:
Dim a as single,b as single,c as single a=5 b=2.5 c=7.8 pi=3.14 y=(pi*a*b)/(a+b*c)print “結果是:”;y 5.8、輸入以秒為單位表示的時間,編寫程序,將其轉換為幾日幾時幾秒。Dim a as long,d as integer,h as integer,s as integer a=inputbox(“請輸入秒數:”,“數據輸入”)d=int(a/86400)h=int((a-d*86400)/3600)s=a-d*86400-h*3600 print d;“日”;h;“時”;s;“秒”
5.9、自由落體位移公式為:s=gt2/2+v0t 其中v0為初始速度,g為重力加速度,t為經歷的時間,編寫程序,求位移量s。設v0=4.8m/s,t=0.5s,g=9.81m/s2,在程序中把g定義為符號常量,用inputbox函數輸入v0和t兩個變量的值。
Dim v as single,t as single,s as single g=9.81 v= inputbox(“請輸入初始速度:”,“數據輸入”)v=val(v)t=inputbox(“請輸入經歷的時間:”,“數據輸入”)t=val(t)s=g*t*t/2+v*t print “位移量是:”;s 第七章
7.1.編程計算并輸出S的值:s=2+4+6+8+?+100 dim i,s as integer s=0 for i=2 to 100 step 2 s=s+i next print s 7.2、我國現有人口為13億,設年增長率為1%,編寫程序,計算多少年后增加到20億。Private Sub Form_click()Dim p As Double Dim r As Single Dim n As Integer p = 130000000 r = 0.01 n = 0 Do While p <= 200000000 p = p *(1 + r)n = n + 1 Loop Print n;“年后”;“中國人口增加到”;p End Sub 7.3、給定三角形的3條邊長,計算三角形的面積。編寫程序:首先判斷給出的3條邊能否構成三角形,如可以構成,則計算并輸出三角形的面積,否則要求重新輸入。當輸入-1時結束程序。
Dim a as single;b as single;c as single Start: a = inputbox(“請輸入第一條邊長-1結束:”,”數據輸入”)a=val(a)if a=-1 then
end end if b=inputbox(“請輸入第二條邊長”,“數據輸入”)b=val(b)c=inputbox(“請輸入第三條邊長”,“數據輸入”)c=val(c)
if a+b<=c or a+c<=b or b+c<=a then
msgbox(“您輸入的三條邊長不能構成三角形,請重新輸入!”)
goto start else
l=(a+b+c)/2
s=sqr(l*(l-a)*(l-b)*(l-c))end if print “三角形的面積為:”;s 7.5、編寫程序,打印如下所示的“數字金字塔”
1 2 1
…… 2 3 4 5 6 7 8 9 8 7 6 5 4 3 2 1 Private Sub Form_Click()Dim a(1 To 5)As Integer For j = 1 To 5 a(j)= j Next j For i = 1 To 5 Print Tab(301 If j > i Then Print a(2 * i2
For J = I + 1 To Maxi)* 2);a(i, 3i
If w(j, 1)> w(j + 1, 1)Then
a1 = w(j, 0)
a2 = w(j, 1)
w(j, 0)= w(j + 1, 0)
w(j, 1)= w(j + 1, 1)
w(j + 1, 0)= a1
w(j + 1, 1)= a2
End If
Next j Next i For i = 0 To 9 Print w(i, 0)Next Print “名次” & “
運動員” & “
成績” For i = 0 To 9
Print “ ” & i + 1 & “
” & Format(w(i, 0), “000”)& “
” & w(i, 1)Next End Sub Private Sub Form_Load()For i = 0 To 9
w(i, 0)= InputBox(“請輸入第” & i + 1 & “運動員的編號”)
w(i, 1)= InputBox(“請輸入第” & i + 1 & “運動員的成績”)Next Command1.Caption = “名次排列” End Sub 8.10.VB編寫程序,建立并輸出一個10*10的矩陣,該矩陣兩條對角線元素為1,其余元素均為0 Private Sub Form_Click()
Dim a(1 To 10, 1 To 10)As Integer
For i = 1 To 10
For j = 1 To 10
a(i, j)= 0
If i = j Then a(i, j)= 1
If i + j = 11 Then a(i, j)= 1
Print a(i, j);“ ”;
Next j
Next i End Sub 8.12.楊輝三角形每一行是(x+y)的n次方的展開式的各項系數。例如第一行系數是1;第二行1,1;第三行1,2,1??請編寫程序輸出n=10的楊輝三角形 Option Base 1 Private Sub Command1_Click()Dim a()As Double m = InputBox(“請輸入行數 ”, “輸入”, 0)ReDim a(m, m)As Double For i = 1 To m a(i, 1)= 1 For j = 1 To m
a(j, j)= 1
If j >= 2 And j <= i1, j1, j)
End If Next j Next i For i = 1 To m For j = 1 To m
If i >= j Then Print Tab(j * 4);Str(a(i, j));
End If Next j Print Next i End Sub
第二篇:《Java6程序設計實踐》教程課后答案_清華大學出版社
第1章:習題集: 填空題
1.多態2.java.exe 3.jdb.exe 4.標準字節碼5.Java 6.獨立于平臺
二、選擇題
1.B 2.A 3.B 4.A 5.A 6.C 7.C 8.D 9.C 第2章: 參考答案: 實驗指導:
2.5.1. 第一處需要的代碼:yourGuess>realNumber
第二處需要的代碼:yourGuess=input.nextInt();第三處需要的代碼:yourGuess iArray[i] = iArray[j];iArray[j] = iTemp;2.5.2. 第一處需要的代碼:iArray[i] < iArray[j] 2.5.3. 第一處需要的代碼:continue lable;第二處需要的代碼:System.out.print(“ ”+(i+j));第二處需要的代碼:System.out.print(j + “*” + i + “=” +(i*j)+ “t”);2.5.4. 第一處需要的代碼:System.out.print(“t”);習題集: 一、填空題 1.i=i+1 sum=sum+1 i<100 2.while do while for 3.9 4. The symbol is an a.The symbol is a b.The symbol is c.The symbol is not a,b,or c.Switch is completed 5.sum=0 pos++ 二、選擇題 1.D 2.A 3.D 4.A 5.D 6.A 7.B 三、簡答題 2、there is no this value 3.Message four i is 1,2,3 i is 1,2,3 i is 1,2,3 i is 4 第3章 參考答案: 實驗指導: 3.10.1. 第一處需要的代碼:balance+=saveAccount; 第二處需要的代碼:balance+=calculateInterst(Days);第三處需要的代碼:ba.setMoney(save_value);第四處需要的代碼:ba.accountInterst(365); 8.B 9.C ba.setInterstRate(interst_rate);3.10.2. 第一處需要的代碼:minute=this.m_Minute;second=this.m_Second;第二處需要的代碼:s=d.getMinutes()+“:”+d.getSeconds()+“:”+d.getTime();3.10.3. 第一處需要的代碼:super(number,pass);balance=bal;第二處需要的代碼:connect 3.10.4. 第一處需要的代碼:super(pass, motor);this.make=make;this.model=model;第二處需要的代碼:am.run();習題集: 一、填空題 1.類2.代碼和數據3.點4.實例變量5.Test te=new Test();6.對象實例化7.值、引用 8.the original is data is:-1 now the data is:10 9.I am parent I am child I am child 二、選擇題 1.B 2.A 3.C 4.C 三、簡答題 6. A abstract和final修飾符不能同時使用 B 未給出類型定義,final int MAX_NUMBER=10;C 常量不能修改 D 靜態方法值能訪問靜態變量,static int data。或者把方法標志為非靜態方法,int getData()E 構造方法無返回值,把void去掉 F 抽象類不能進行實例化,把abstract去掉 G 子類不能繼承父類的私有成員,應把Parent類中的mine屬性的private修飾符去掉。H 父類對象不能與之類形式參數結合,可以顛倒過來。如下代碼所示: class Parent { } class Child extends Parent{ } class UseChild{ } public static void main(String[] args){ Child c=new Child();System.out.println(UseChild.getMine(c));static int getMine(Parent p){ } return(p.mine);int mine;int mine; 5.A 6.A 7.C 8.A 9.D 10.C 11.A 12.C 13.C } 第4章 實驗指導 4.5.1. 第一處需要的代碼:public void print(){System.out.println(“hello”);}yourGuess>realNumber 第二處需要的代碼:Hello h = new Hello();h.print();第二處需要的代碼:public void start(){ System.out.println(“Du du...”);} 4.5.2. 第一處需要的代碼:public void stop(){ System.out.println(“Network stop!”);} 第三處需要的代碼:SoundCard sc=new SoundCard();mb.usePCICard(sc);4.5.3. 第一處需要的代碼:this.userAccount = acc;this.userPassword = pass;第二處需要的代碼:public void show(){ System.out.println(resultMessage);} 第三處需要的代碼:user.connect();user.show();填空題 1.javac –d.Test.java 2.package 3.public 4. package com.my.test;public void inPut(){System.out.println(“n hi,keybroad has be input into then mainbroad!n”);} public void inPut(){System.out.println(“n hi,netCardBroad has be input into then mainbroad!n”);} publicvoid getMainMessage(Extendbroadable ext){ext.inPut();} 5.Constants.MAX_COUNT 6.interface B extends A{ public void printB();} 11.D 12.A 選擇題 1.C 2.D 3.B 4.C 5.B 6.C 7.C 8.B 9.D 10.D 簡答 (1) 1、接口是類似于類的結構,它只包含常量和抽象方法。在某些情況下,接口類似于抽象類,但是抽象類能夠包含常量和抽象方法,還能夠包含變量和具體方法。(2) 1、在接口中,數據可以是常量;而抽象類可以有數據字段。 2、在接口中方法只有無實現的簽名,而抽象類可以有具體的方法。 3、因為定義在接口中的所有方法都是抽象方法,Java不要求將抽象修飾符放在4、接口中的方法簽名中,但是在抽象類中要將抽象修飾符放在抽象方法之前。(3) 1、可以更好的組織類。 2、減少類名的沖突問題,同一包中的類名不能重復,不同包中的類名可以重復; 3、對包中的類起了一定的保護作用; (4) 1、直接引用指定的類,如import java.util.Vector; 2、引用一個包中的多個類,如import java.awt.*。更確切的說,它并不是引用java.awt中的所有類,而只引用定義為public的類,并且只引用被代碼引用的類,所以這種引用方法并不會降低程序的性能; 3、*號代替類名,在不能代替包名,如import java.awt.*,只引用java.awt下的類,而不引用java.awt下的包; 4、import java.awt.F*,這種使用方法是錯誤的; 5、import語句在所有類定義之前,在package定義之后; 6、import只告訴編譯器及解釋器哪里可以找到類、變量、方法的定義,而并沒有將這些定義引入代碼中; 第5章 參考答案: 實驗指導: 5.6.1. 第一處需要填寫的代碼:i 1.equalsIgnoreCase 2.Hello I like Java!3.char值4.java.util.Date 5.HELLO!6.False 7.a#a#a## 8.xyz345 9.int len=str.length(); 二、選擇題 1.B 2.A 3.A 4.B 5.D 6.A 7.B 8.D 三、簡答題 1. 字符串的容量是:28 用過setLength(200)后 字符串的長度是:200 使用了charAt(2):w 2. 中國: The Money is: ¥30,215.00 The Number is: 121.66667 3.good and gbc 4.strawberry plum persimmon pear peach peach orange grape fig banana apple 第6章 實驗指導 6.4.1. 第一處需要的代碼:number1 = Integer.parseInt(firstNumber);number2= Integer.parseInt(secondNumber);yourGuess>realNumber 第二處需要的代碼:NumberFormatException ex 6.4.2. 第一處需要的代碼:catch(IOException e){System.out.println(“catch ”+e.toString());} 第二處需要的代碼:catch(NumberFormatException e){System.out.println(“catch ”+e.toString());} 填空題: 1.Welcome to java The finally clause is executed 2.Welcome to java The finally clause is executed 3.catch(NumberFormatException e){} 4.仍然執行 c>='A'&&c<='Z' i++; sum++;10.i=0;i int temp=str.charAt(i);5.ArithmeticException 6.IOException 7.數據轉換錯誤異常 8.statement1,statement2 二、選擇題 1.C 2.B 3.C 4.D 5.C 6.B 7.C 第7章 實驗指導: 7.7.1. 第一處需要填寫的代碼:panel.setVisible(true);第二處需要填寫的代碼:group.add(radioButton1); group.add(radioButton2);第三處需要填寫的代碼:mainPanel.add(panel);7.7.2. 第一處需要填寫的代碼:commentTabPane = new JTabbedPane();第二處需要填寫的代碼:tabAddComponent.add(nameLabel);第三處需要填寫的代碼:queryCom();7.7.3. 第一處需要填寫的代碼:System.exit(0);第二處需要填寫的代碼:new Counter();7.7.4. 第一處需要填寫的代碼:setVisible(true);第二處需要填寫的代碼:frame.getContentPane().add(new JTextArea());習題集: 填空題 1.btn[i]=new JButton(strname[i]);BorderLayout.EAST、BorderLayout.WEST、BorderLayout.SOUTH、BorderLayout.NORTH、BorderLayout.CENTER 2.frame.setContentPane(new CalculatorPanel().createPane());int y = 0;y < 4;y++、button = new JButton(lables[y][x]);3.frame.getContentPane().add(new TreePanel().createComponent());node01.add(node0102);int i = 0;i < names.length;i++、panel.add(new JLabel(names[i]));4.jframe.setVisible(true);Container contentpane=jframe.getContentPane();text.append(s);5.Container contentPanel = frame.getContentPane();frame.setVisible(true);add(part2());panel.setVisible(true);6.Panel pan=new Panel(); 二、選擇題 1.D 2.A 3.B 4.B 5.A 6.D 7.C 第8章 實驗指導: 8.6.1. 第一處需要的代碼:contentPane.addMouseListener(this);contentPane.addMouseMotionListener(this); 第二處需要的代碼:g.drawLine(startx,starty,endx,endy);第二處需要的代碼:(e.getActionCommand()).equals(“按我有聲音喔”)第二處需要的代碼:e.getSource()==tree 第二處需要的代碼:x=Double.parseDouble(tf1.getText().trim());8.6.2. 第一處需要的代碼:Container contentPane = f.getContentPane();8.6.3. 第一處需要的代碼:treeModel.insertNodeInto(leafnode,node1,node1.getChildCount());8.6.4. 第一處需要的代碼:b0.addActionListener(new Bt());習題集: 一、填空題 1.程序符號 2.授權事件模型 3.actionPerformed(ActionEvent e),itemStateChanged(ItemEvent e)4.事件適配器 5.new WindowAdapter(),System.exit(0); 二、選擇題 1.D 2.C 3.D 4.B 5.A 第9章 參考答案: 實驗指導: 9.4.1. 第一處需要填寫的代碼:g_2d.setStroke(bs);g_2d.setColor(Color.yellow);g_2d.draw(hourLine);第二處需要填寫的代碼:secondLine.setLine(120,120,(int)pointSX[a],(int)pointSY[a]);9.4.2. 第一處需要填寫的代碼:signal.setRed(0);signal.setYellow(1);第二處需要填寫的代碼:g.setColor(Color.green);習題集: 填空題: 1.Drawstring 2.add(p1)3.toString(i)4.public void paint(Graphics g){ 5.int count=1;count 1.A 2.B 3.B 4.B 第10章 實驗指導: 10.6.1. 第一處需要填寫的代碼:tempStr=bufReader.readLine();第二處需要填寫的代碼:s*=i;10.6.2. 第一處需要填寫的代碼:filePrex == null 第二處需要填寫的代碼:int j = 0;j < children.length;j++ 10.6.3. 第一處需要填寫的代碼:inStream,outStream 第二處需要填寫的代碼:copyBut,0,copyLen 10.6.4. 第一處需要填寫的代碼:tempStr=inObj.readLine();習題集: 一、填空題: 1.Hello!I like Java!2.110 110 110 110 110 3.InputStreamReader 4.HelloWorld!5.year%4==0&&year%100!=0||year%400==0 6.String s=“information to Appendn mon!n”; 二、選擇題: 1.D 2.A 3.A 4.B 5.D 6.B 7.B 8.D BufferedReader readLine()第11章 參考答案: 實驗指導: 11.6.1.第一處需要填寫的代碼:Class.forName(DBDRIVER);conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);第二處需要填寫的代碼:conn = getConnection();stmt = conn.createStatement();第三處需要填寫的代碼:stmt.executeUpdate(“insert into t_test values('ew','dgf','dfg');”); stmt.executeUpdate(“insert stmt.executeUpdate(”insert into into t_test t_test values('dg','df','fdg');“); values('dfg','dfg','dfg');”);stmt.executeUpdate(“insert into t_test values('gdf','df','df');”);第四處需要填寫的代碼:stmt.executeUpdate(“delete from t_test;”);11.6.2.第一處需要填寫的代碼:pstmt=conn.prepareStatement(“insert into t_grade values(?,?,?);”);pstmt.setString(1,name);pstmt.setString(2,course);pstmt.setString(3,grade);pstmt.execute();第二處需要填寫的代碼:rs = stmt.executeQuery(“select * from t_grade”); while(rs.next()){System.out.print(“姓名:”+rs.getString(“name”)); System.out.print(“ 課程:”+rs.getString(“course”));System.out.println(“ 成績:”+rs.getString(“grade”));} conn.close();stmt.close();rs.close();} } 第三處需要填寫的代碼:try{ catch(SQLException e){ e.printStackTrace();11.6.3.第一處需要填寫的代碼:conn = getConnection();stmt = conn.createStatement();stmt.executeUpdate(“delete from t_grade where name = '”+name+“'”);第二處需要填寫的代碼:pstmt = conn.prepareStatement(“update t_grade set course = ?,grade=? where name = '”+name+“'”);pstmt.setString(1,course);pstmt.setString(2,grade);pstmt.execute();習題集: 一、填空題: 1.建立與數據庫的連接、處理結果集 2.executeUpdate 3.CallableStatement 4.conn.createStatement();、rs.next();5.conn.createStatement(ResultSet.Type_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE):、rs.updateRow(); 二、選擇題: 1.B 2.A 3.B 4.B 5.C 6.A 7.A 8.C Java Web 程序設計教程(范立鋒、林果園 編著) 第6章Struts 2進階習題答案 1.如何部署和添加攔截器? 使用 使用 2.繼承類DefaultTypeConverter或類StrutsTypeConverter可實現自定義類型轉換器。 3.在使用 4.在Struts 2應用中如何實現國際化? 實現國際化的步驟: ①創建國際化資源文件,例如sunyang_zh_CN.properties、sunyang_en_US.properties。②在資源文件中添加需要國際化的內容,例如: hello=你好 hello=hello ③配置國際化資源文件,可將資源文件配置為全局范圍、包范圍或Action范圍。④調用國際化資源文件,在應用中使用不同的方式來獲得國際化資源信息。 5.在Struts 2應用中如何實現文件上傳? 實現文件上傳的步驟: ①如果需要,在struts.properties文件中重新配置上傳解析器。 ②在Action類中封裝與上傳文件相關的屬性,例如: public class UploadAction extends ActionSupport { private String title;private File pic;// 上傳文件標題 // 上傳文件 private String picContentType;// 上傳文件類型 private String picFileName;private String savePath;// 上傳文件名 // 上傳文件保存路徑public void setSavePath(String savePath){} // 返回文件上傳路徑 private String getSavePath(){} //省略其他屬性的set、get方法 HttpServletRequest request = ServletActionContext.getRequest();return request.getRealPath(savePath);this.savePath = savePath; public String execute()throws Exception {setSavePath(“");// 將上傳文件存儲路徑設為空 FileOutputStream fos = new FileOutputStream(getSavePath()+ ”"+ getPicFileName()); // 以上傳文件存放路徑和原文件名建立一個輸出流 FileInputStream fis = new FileInputStream(getPic()); // 以上傳文件建立一個輸入流 byte[] buffer = new byte[1024];int len = 0;while((len = fis.read(buffer))> 0){fos.write(buffer, 0, len); // 將上傳文件寫入到輸出流所對應的文件中 } ③將用于實現文件上傳的Action類進行相關的配置,配置方式和普通的Action類相同。} } return SUCCESS; Java Web 程序設計教程(范立鋒、林果園 編著) 第1章Web應用開發簡介習題答案 1.Web在組成上包括服務器和客戶端兩部分。 2.談談對面向對象的認識。 面向對象將將要解決的問題分解成各個對象,建立對象的目的不是為了完成一個步驟,而是為了描敘解決問題中的各個步驟中的行為。面向對象編程方式是建立在面向過程編程方式基礎上,其最重要的改變在于面向對象編程中,程序將圍繞被操作的對象來設計,而不是操作本身。面向對象編程方式以類作為構造程序的基本單位,具有封裝、抽象、繼承、多態性等特點。 3.介紹幾種常用的框架技術。 ①Struts:Struts是Apache 基金會Jakarta 項目組的一個開源項目,是一個基于Sun J2EE平臺的MVC框架,它將Servlet和JSP標簽作為實現自身功能的一部分。 ②WebWork:WebWork是由OpenSymphony組織開發的,是一個基于Web的MVC框架。它在運行時通過Interceptor(攔截器)自動應用,因此脫離了Action類。 ③Struts 2:Struts 2是Apache基金會的一個開源項目,它建立在Struts框架與WebWork框架基礎之上,繼承了二者的優點,是目前非常流行的一個Web框架。 ④Spring:Spring是一個以IoC和AOP為核心的輕量級容器框架。它提供了一系列的Java EE開發解決方案,包括表示層的Spring MVC、持久層的Spring JDBC以及業務層事務管理等眾多的企業級應用技術。 ⑤Hibernate:Hibernate是一個ORM(對象關系映射)框架,它對JDBC進行了輕量級的封裝。通過使用Hibernate框架,開發人員能夠以面向對象的思維方式來操作數據庫。 ⑥Ibatis:相對于Hibernate而言,Ibatis是一個“半自動化”的ORM實現框架,它主要致力于POJO與SQL之間的映射關系,是對“全自動化”ORM框架的一種有益補充。 ⑦EasyJWeb:EasyJWeb是一個核心基于模板技術實現的MVC框架,主要致力于Java Web應用程序的快速開發。 4.IDE的用途是什么? IDE是一種用于輔助開發人員開發應用程序的應用軟件,它一般包括代碼編輯器、編譯器、調試器和圖形用戶界面工具,有的還包括版本控制系統、性能分析器等更多工具,因此IDE也就具有了編寫、編譯、調試等多種功能。正是基于這些功能,使用IDE能夠減少項目的開發周期,減輕程序員的工作量,提高應用程序的開發效率等。 5.Web應用服務器的用途是什么? Web應用服務器是為創建、部署、運行以及管理Web應用提供多種運行時服務(如事務、安全等等)的分布式系統,它是應用程序運行的一個基本環境。 Java Web 程序設計教程(范立鋒、林果園 編著) 第12章Spring AOP習題答案 1.如何理解動態代理? 動態代理是代理模式的延伸和拓展,它改善了代理模式存在的一些弊端。通過Java的動態代理機制,可以非常容易地實現AOP思想,而Spring的AOP也是建立在 Java的代理機制之上的。在動態代理的實現過程中,代理對象是根據實際需要而被創建的。當應用程序需要調用某個對象時,該對象才會被創建。 2.如何理解Spring的AOP? Spring AOP也是基于AOP這一基本思想,但是它卻側重于提供一個能與Spring IoC容器整合使用的AOP框架。Spring AOP不僅提供了AOP基礎框架,還提供很多現成方面實現。Spring AOP主要特點包括如下幾方面: ①支持方法調用的各類通知,包括前置型通知、后置型通知、拋出異常通知以及環繞型通知等等。②支持通過正則表達式指定切入點,同時支持切入點的組合操作。 ③可以在不修改框架核心代碼的基礎上加入自定義通知。 ④AOP組件可以被當作Spring Bean來管理,與IoC容器結合使用。 ⑤支持使用元數據實現AOP聲明服務。 ⑥AOP組件可以應用于不同avaEE服務器。 3.Spring的通知包括哪些? 前置型通知(BeforeAdvice),后置型通知(AfterRetruningAdvice),環繞型通知(MethodInterceptor),拋出異常通知(ThrowAdvice)。 4.靜態切入點和動態切入點有什么區別? 靜態切入點只限于給定的方法和目標類,而不考慮方法的參數,在絕大多數情況下使用靜態切入點能夠滿足程序需要。Spring在調用靜態切入點時,只在第一次的時候計算靜態切入點的位置并將它緩存起來,以后就不需要再進行計算了。動態切入點不僅限定于給點的方法和類,還可以指定方法的參數。使用動態切入點要比使用靜態切入點帶來更多的性能損耗,因為在使用動態切入點時不僅要考慮靜態信息,還要考慮方法的參數。每次方法被調用的時候,都需要對切入點進行計算,因為參數是變化的所以不能緩存每次的計算結果。 5.如何理解ProxyFactoryBean? 在Spring框架中ProxyFactory主要用于創建一個代理對象以實現AOP機制。在程序執行過程中,ProxyFactory會調用另一個組件DefaultAopProxyFactory來真正創建代理對象。根據設置的不同,被創建的代理對象可以是Cglib2AopProxy(CGLIB代理),也可以是JdkDynamicAopProxy(Java動態代理)。通過調用ProxyFactory提供的不同方法,我們可以在程序任意位置織入advisor或者advice。第三篇:Java Web 程序設計教程 第6章習題答案(范立鋒、林果園 編著)
第四篇:Java Web 程序設計教程 第1章習題答案(范立鋒、林果園 編著)
第五篇:Java Web 程序設計教程 第12章習題答案(范立鋒、林果園 編著)