1.
【知识点】
(1)Thread(线程):
线程对象创建后,可以调用start()方法启动,但线程实际开始运行时间点是由系统调度决定的,不能认为调用start()方法后一定会立即执行线程;
(2)Exception(异常):Java语言中异常有三种类型:
(a)checked exception(受检异常),这类异常是最常见异常,在编写应用程序时可以预期它会发生,并且通过try…catch…finally语句块捕捉,以便程序能从异常中恢复运行,防止出现程序崩溃,比如文件处理中的FileNotFoundException异常。
(b)error(错误),这类异常是应用程序编写时无法预期的,一旦发生也不可恢复运行。通常是由系统或硬件故障等外部原因造成,由于错误无法预期因此通常不采用try…catch…finally语句块捕捉。
(c)runtime exception(运行时异常),这类异常虽然也是应用程序内部原因造成的,但应用程序通常也是无法预期它的发生,发生后也无法让程序恢复运行,比如NullPointerException,虽然应用程序能捕捉这些异常,但由于这类异常发生后无法让程序恢复运行,因此通常也不需要try…catch…finally语句块捕捉。
Error、RuntiomeException及其子类都称为unchecked exception(非检异常),Java程序设计语言并不要求通过try…catch…finally语句块捕捉unchecked exception,
【例题】
Given:
public class Threads2 implements Runnable {
public void run() {
System.out.println("run.");
throw new RuntimeException("Problem");
}
public static void main(String[]args) {
Thread t = new Thread(newThreads2());
t.start();
System.out.println("End ofmethod.");
}
}
Which two can be results? (Choose two.)
A. java.lang.RuntimeException: Problem
B. run.
java.lang.RuntimeException: Problem
C. End of method.
java.lang.RuntimeException: Problem
D. End of method.
run.
java.lang.RuntimeException: Problem
E. run.
java.lang.RuntimeException: Problem
End of method.
【Answer】 DE
【例题辨析】
(1)run()方法有语句:
throw new RuntimeException("Problem");
而主程序没有捕捉该异常,似乎有错,但RuntimeException属于unchecked exception,按Java语法规则并不需要捕捉,因此可以编译运行,但运行时抛出该异常后将显示如下信息并中止执行:
Exception in thread "Thread-0"run.
java.lang.RuntimeException: Problem
atThreads2.run(Threads2.java:7)
atjava.lang.Thread.run(Unknown Source)
(2) 线程启动后,实际运行时间点是由系统决定的,因此System.out.println("End of method.");可能先于线程中run()方法执行,也可能在run()方法之后执行,因此正确答案应该是DE。