【发布时间】:2013-05-18 06:30:05
【问题描述】:
public class dummy {
public static void main(String[] args) { System.out.println("hello world"); }
public void init() {
//"dummy2" class defined in a different jar
dummy2 d = new dummy2();
try { d.run(); }
//"dummyexception" class defined in a different jar
catch (dummyexception e) { e.printStackTrace(); }
catch (Exception e) { e.printStackTrace(); }
}
public void init2() {
Runnable r = new Runnable() {
@Override
public void run() {
//"dummy2" class defined in a different jar
dummy2 d = new dummy2();
try { d.run(); }
//"dummyexception" class defined in a different jar
catch (dummyexception e) { e.printStackTrace(); }
catch (Exception e) { e.printStackTrace(); }
}
};
}
}
现在在运行之前,我从类路径中删除了依赖 jar。
我得到 'ClassNotFoundException' 用于方法 init() 中引用的类 'dummyexception' 而不是方法 init2() 中的用法。有趣的是,在方法 init() 中引用的类“dummy2”没有“ClassNotFoundException”。
【问题讨论】:
-
您的代码示例在这里值一千字。
-
谁在打电话给
init()或init2()? -
@RaviTrivedi 假设 init() 和 init2() 从未调用过
-
@taky,先生,那么他不应该收到此错误,因为仅因为未使用方法而没有发生动态链接。这意味着 JVM 在类文件中不需要将字符串符号引用转换为指向这些方法的实际指针。
-
@RaviTrivedi 我很迷茫,但是当你加载类时,方法会尝试在 catch 声明中分类。可能与JVM内部的异常处理机制有关。
标签: java exception classloader classnotfound