我知道在Java中,类是通过懒加载的方式进行加载的,这意味着在使用之前不会被加载。但是,异常是否因某种原因而被单独处理?我最近遇到了一个情况,即为异常类获取到一个ClassNotFoundException异常,尽管没有抛出任何异常。
例子:
当我以一个参数的形式运行这个程序时,我会得到以下结果:
然而,如果我在A类中取消try/catch注释,就会得到以下结果:
为什么Java在没有抛出异常/未加载类的情况下尝试加载异常类?
例子:
public class A {
public static void main(String[] args) {
if( args.length == 1 ){
new C();
}
if( args.length > 2 ){
// try {
// B.throwAnException();
// } catch (com.google.protobuf.InvalidProtocolBufferException e) {
// e.printStackTrace();
// }
}
}
}
B类:
import com.google.protobuf.InvalidProtocolBufferException;
public class B {
static{
System.out.println( "Load Class B" );
}
static void throwAnException() throws InvalidProtocolBufferException{
throw new com.google.protobuf.InvalidProtocolBufferException("jkl");
}
}
类C:
public class C {
static{
System.out.println( "Load class C" );
}
}
当我以一个参数的形式运行这个程序时,我会得到以下结果:
$java A arg1
Load class C
然而,如果我在A类中取消try/catch注释,就会得到以下结果:
$ java A arg1
Exception in thread "main" java.lang.NoClassDefFoundError: com/google/protobuf/InvalidProtocolBufferException
为什么Java在没有抛出异常/未加载类的情况下尝试加载异常类?