Java Puzzlers里面的一个谜题,大家都给个解释,进者有分
请考虑下面两个类:
//Strange1.java
public class Strange1 {
public static void main(String[] args) {
try {
Missing m = new Missing();
} catch (java.lang.NoClassDefFoundError ex) {
System.out.println("Got it!");
}
}
}
//Strange2.java
public class Strange2 {
public static void main(String[] args) {
Missing m;
try {
m = new Missing();
} catch (java.lang.NoClassDefFoundError ex) {
System.out.println("Got it!");
}
}
}
这两个类Strange1,Strange2都用到了下面的类:
//Missing.java
class Missing {
Missing() { }
}
如果你编译这3个类,然后在运行Strange1和Strange2之前删除Missing.class文件,你就会发现这两个程序的行为有所不同,其中一个抛出了一个未被捕获的NoClassDefFoundError异常,而另一个却打印了Got it!,到底是哪一个程序具有哪一种行为,你又如何去解释这种差异.
结果是:Strange1抛出了异常,Strange2打印了Got it!
书中的解释反而让我更糊涂,翻译的本来就不好,解释起来反而更糊涂了,大家都试试?发表下自己的看法.