java 无法import_java – 如果无法解析import语句会发生什么?

import语句仅对编译器很重要.在字节码中,对其他类的所有引用都是完全限定的.这就是为什么超级进口在运行时无关紧要的原因.

在您的情况下,JVM将尝试加载加载和验证A所需的所有类,因此它将尝试立即加载B,但是只有在需要时才会延迟加载依赖类.看看以下示例:

public class A {

public static void bar() {

new B().foo();

}

public static void main(String[] args) {

//bar();

}

}

编译A.java并删除B.class.如果不调用bar()方法,程序就可以正常运行.但是一旦你实际使用B类取消注释代码,你就会变得讨厌:

Exception in thread "main" java.lang.NoClassDefFoundError: B

at A.bar(A.java:4)

at A.main(A.java:8)

Caused by: java.lang.ClassNotFoundException: B

at java.net.URLClassLoader$1.run(URLClassLoader.java:366)

at java.net.URLClassLoader$1.run(URLClassLoader.java:355)

at java.security.AccessController.doPrivileged(Native Method)

at java.net.URLClassLoader.findClass(URLClassLoader.java:354)

at java.lang.ClassLoader.loadClass(ClassLoader.java:423)

at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)

at java.lang.ClassLoader.loadClass(ClassLoader.java:356)

... 2 more

如果B不可用,你将得到NoClassDefFound或类似的.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值