练习4
1.StringBuffer类对象创建之后可以再修改和变动. (A)
A:正确
B:错误
//:String str = “aa”; str = “aa”+“bb”; 此时str的值为"aabb",但是"aabb"不是在开始的字符串"aa"后面直接连接的"bb",而是又新生成了字符串"aabb",字符串"aa"一旦被初始化,那么它的值不可能再改变了。 StringBuffer strb = StringBuffer(“aa”); strb.append(“bb”); 此时的strb的值也为"aabb",但是"aabb"是直接在开始的字符串"aa"后面连接的“bb”,并没有生成新的字符串。
2.下面有关JAVA异常类的描述,说法错误的是?
A:异常的继承结构:基类为Throwable,Error和Exception继承Throwable,RuntimeException和IOException等继承Exception
B:非RuntimeException一般是外部错误(非Error),其一般被 try{}catch语句块所捕获
C:Error类体系描述了Java运行系统中的内部错误以及资源耗尽的情形,Error不需要捕捉
D:RuntimeException体系包括错误的类型转换、数组越界访问和试图访问空指针等等,必须被 try{}catch语句块所捕获
//答案(D)
//异常是指程序运行时(非编译)所发生的非正常情况或错误,当程序违反了语音规则,jvm就会将出现的错误表示一个异常抛出。
异常也是java 的对象,定义了基类 java。lang。throwable作为异常父类。 这些异常类又包括error和exception。两大类
error类异常主要是运行时逻辑错误导致,一个正确程序中是不应该出现error的。当出现error一般jvm会终止。
exception表示可恢复异常,包括检查异常和运行时异常。 检查异常是最常见异常比如 io异常sql异常,都发生在编译阶段。这类通过try、catch捕捉
而运行时异常,编译器没有强制对其进行捕捉和处理。一般都会把异常向上抛出,直到遇到处理代码位置,若没有处理块就会抛到最上层,多线程用thread。run()抛出,单线程用main()抛出。常见的运行异常包括 空指针异常 类型转换异常 数组月结异常 数组存储异常 缓冲区溢出异常 算术异常等,
3.在Web应用程序中,( )负责将HTTP请求转换为HttpServletRequest对象
A:Servlet对象
B:HTTP服务器
C:Web容器
D:JSP网页
//答案:C
//web容器是一种服务程序,在服务器一个端口就有一个提供相应服务的程序,而这个程序就是处理从客户端发出的请求,如JAVA中的Tomcat容器,ASP的IIS或PWS都是这样的容器。一个服务器可以多个容器。
public boolean returnTest()
{
try
{
return true;
}
catch (Exception e)
{
}
finally
{
return false;
}
}
以上代码返回值是什么?
//答案:false
//一旦在finally块中使用了return或throw语句,将会导致try块,catch块中的return,throw语句失效
5.下列有关Servlet的生命周期,说法不正确的是?
A:在创建自己的Servlet时候,应该在初始化方法init()方法中创建Servlet实例
B:在Servlet生命周期的服务阶段,执行service()方法,根据用户请求的方法,执行相应的doGet()或是doPost()方法
C:在销毁阶段,执行destroy()方法后会释放Servlet 占用的资源
D:destroy()方法仅执行一次,即在服务器停止且卸载Servlet时执行该方法
//答案:A
//创建Servlet的实例是由Servlet容器来完成的,且创建Servlet实例是在初始化方法init()之前
//Servlet的生命周期分为5个阶段:加载、创建、初始化、处理客户请求、卸载。
(1)加载:容器通过类加载器使用servlet类对应的文件加载servlet
(2)创建:通过调用servlet构造函数创建一个servlet对象
(3)初始化:调用init方法初始化
(4)处理客户请求:每当有一个客户请求,容器会创建一个线程来处理客户请求
(5)卸载:调用destroy方法让servlet自己释放其占用的资源
public class Test {
public static void main(String[] args) {
System.out.println(test());
}
private static int test() {
int temp = 1;
try {
System.out.println(temp);
return ++temp;
} catch (Exception e) {
System.out.println(temp);
return ++temp;
} finally {
++temp;
System.out.println(temp);
}
}
}
-
A:1,2,2
-
B:1,2,3
-
C:1,3,3
-
D:1,3,2
//答案:D
// 1. finally块一定会执行(除非退出虚拟机),无论是否try…catch。
2、finally块前有return,会先执行return语句,并保存下来,再执行finally块,最后return。
3、finally块前有return、finally块中也有return,先执行前面的return,保存下来,再执行finally的return,覆盖之前的结果,并返回。
执行顺序为:
输出try里面的初始temp:1;
temp=2;
保存return里面temp的值:2;
执行finally的语句temp:3,输出temp:3;
返回try中的return语句,返回存在里面的temp的值:2;
输出temp:2。
7.关于下面这段Java程序,哪些描述是正确的:( )
public class ThreadTest extends Thread {
public void run() {
System.out.println("In run");
yield();
System.out.println("Leaving run");
}
public static void main(String []argv) {
(new ThreadTest()).start();
}
}
A:程序运行输出只有In run
B:程序运行输出只有Leaving run
C:程序运行输出先有In run后有Leaving run
D:程序运行输出先有Leaving run后有In run
E:程序没有任何输出就退出了
F:程序将被挂起,只能强制退出
//答案:C
//Thread.yield()方法作用是:暂停当前正在执行的线程对象,并执行其他线程。