1.J2EE中,当把来自客户机的HTTP请求委托给servlet时,会调用HttpServlet的( )方法
A.service
B.doget
C.dopost
D.init
2.下面代码的运行结果为
public class Example{
String str = new String("good");
char[ ] ch = { 'a' , 'b' , 'c' };
public static void main(String args[]){
Example ex = new Example();
ex.change(ex.str,ex.ch);
System.out.print(ex.str + " and ");
System.out.print(ex.ch);
}
public void change(String str,char ch[ ]){
str = "test ok";
ch[0] = 'g';
}
}
public class Test {
public static void main(String args[]) {
String s = "tommy";
Object o = s;
sayHello(o); //语句1
sayHello(s); //语句2
}
public static void sayHello(String to) {
System.out.println(String.format("Hello, %s", to));
}
public static void sayHello(Object to) {
System.out.println(String.format("Welcome, %s", to));
}
}
A.这段程序有编译错误
B.语句1输出为:Hello, tommy
C.语句2输出为:Hello, tommy
D.语句1输出为:Welcome, tommy
E.语句2输出为:Welcome, tommy
F.根据选用的Java编译器不同,这段程序的输出可能不同
(1)A
HttpServlet容器响应Web客户请求流程如下:
1)Web客户向Servlet容器发出Http请求;
2)Servlet容器解析Web客户的Http请求;
3)Servlet容器创建一个HttpRequest对象,在这个对象中封装Http请求信息;
4)Servlet容器创建一个HttpResponse对象;
5)Servlet容器调用HttpServlet的service方法,这个方法中会根据request的Method来判断具体是执行doGet还是doPost,把HttpRequest和HttpResponse对象作为service方法的参数传给HttpServlet对象;
6)HttpServlet调用HttpRequest的有关方法,获取HTTP请求信息;
7)HttpServlet调用HttpResponse的有关方法,生成响应数据;
8)Servlet容器把HttpServlet的响应结果传给Web客户。
doGet() 或 doPost() 是创建HttpServlet时需要覆盖的方法.
(2)good and gbc
形参str只是栈上的一个引用,和ex.str是一个性质,但是是另个变量,str=“test ok”改变的是str的指向,和ex.str没有一毛钱关系
(3)Line.Point p = (new Line()).getPoint();
因为Point 在 类 Line 里面,属于内部类,直接 使用 Point p 肯定报错。
而public class Point { public int x,y;} 是 Point 的构造方法, Line 肯定不能 获取到,Point
只能获取到其Class
Class c =Line.Point.class;
但是如果是
private class Point , Line.Point 将报错不到
对象,只能通过
getPoint()
,而 getPoint 不是静态方法,所以需要new Line ,
(4)BC
A.若e3先出,说明e1,e2肯定没出且是连着的,所以e1若出来的前提是e2先出来,故A错
B,C以此类推
要记住先进后出;
且条件是一个元素进栈后可以马上出栈,不用等全部进栈,也就是说进了就可以立刻出去,不需要等后面的进栈之后再挨个出去
(5)正确答案: A B C D
(6)正确答案: A
(7)D
编译时异常必须显示处理,运行时异常交给虚拟机。
运行时异常可以不处理。当出现这样的异常时,总是由虚拟机接管。比如我们从来没有人去处理过Null Pointer Exception异常,它就是运行时异常,并且这种异常还是最常见的异常之一。出现运行时异常后,系统会把异常一直往上层抛,一直遇到处理代码。如果没有处理块,到最上层,如果是多线程就由Thread.run()抛出,如果是单线程就被main()抛出。抛出之后,如果是线程,这个线程也就退出了。如果是主程序抛出的异常,整个程序也就退出了。运行时异常是Exception的子类,也有一般异常的特点,是可以被Catch块处理的。只不过往往不对它处理罢了。也就是说,如果不对运行时异常进行处理,那么出现运行时异常之后,要么是线程中止,要么是主程序终止。
(8)D
x=y
隐含着需要读取y才能赋值给x,存在数据依赖,需要禁止重排序,不然可能有同步问题
(9)A
(10)正确答案: C D
就近原则