在JAVA解惑一书中 看到这样的一个例子:
public class Strange1{
public static void main(String []args){
try{
Missing m=new Missing();
}catch(java.lang.NoClassDefFoundError ex){
System.out.print("Got it");
}
}
}public class Strange2{
public static void main(String []args){
Missing m;
try{
m=new Missing();
}catch(java.lang.NoClassDefFoundError ex){
System.out.print("Got it");
}
}
}
都用到了下面的这个类:
class Missing{
Missing(){};
}现在的问题是这样的:如果你编译所有的这三个类,然后在运行Strange1和Strange2之前删除Missing.class文件,你就会发现这2个程序的行为有所不同。其中第一个抛出了NoClassDefFoundError异常,而另一个却打印了Got it.按理来说程序Strange1只在其try语句块中提及Missing类型,因此你可能会认为它能捕获异常,Strange2可能会产生NoClassFoundError异常 而结果确完全相反 这是为什么??? 求大牛讲解 谢谢了
public class Strange1{
public static void main(String []args){
try{
Missing m=new Missing();
}catch(java.lang.NoClassDefFoundError ex){
System.out.print("Got it");
}
}
}public class Strange2{
public static void main(String []args){
Missing m;
try{
m=new Missing();
}catch(java.lang.NoClassDefFoundError ex){
System.out.print("Got it");
}
}
}
都用到了下面的这个类:
class Missing{
Missing(){};
}现在的问题是这样的:如果你编译所有的这三个类,然后在运行Strange1和Strange2之前删除Missing.class文件,你就会发现这2个程序的行为有所不同。其中第一个抛出了NoClassDefFoundError异常,而另一个却打印了Got it.按理来说程序Strange1只在其try语句块中提及Missing类型,因此你可能会认为它能捕获异常,Strange2可能会产生NoClassFoundError异常 而结果确完全相反 这是为什么??? 求大牛讲解 谢谢了
使用cmd - javac - 删除 miss.class - java, 表现结果行为一直,都打印了Got it
通过myeclipse ide 编译 手动去删classes文件夹里的miss.class 表现结果和楼主一致
所以...个人感觉,没有意义的研究
使用cmd - javac - 删除 miss.class - java, 表现结果行为一直,都打印了Got it
通过myeclipse ide 编译 手动去删classes文件夹里的miss.class 表现结果和楼主一致
所以...个人感觉,没有意义的研究
通过myeclipse ide 编译 手动去删classes文件夹里的miss.class 表现结果和楼主一致
所以...个人感觉,没有意义的研究
我这里只是探讨哪种的方法好用 让代码跟安全
通过myeclipse ide 编译 手动去删classes文件夹里的miss.class 表现结果和楼主一致
所以...个人感觉,没有意义的研究
我这里只是探讨哪种的方法好用 让代码跟安全
用的是 myEclipse IDE 测试的
Strange1 会打印出 Got it ,这个因为Missing m 在try的里面定义的。