第一篇: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章习题答案(范立锋、林果园 编著)