我知道在 Java 中,类是使用惰性方式加载的,因此在使用它们之前不会加载它们。是否出于某种原因对异常进行了不同的处理?我刚刚遇到了ClassNotFound
一个异常类的异常,即使没有抛出异常。
例子:
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 会尝试加载异常类?