JLS表示resolveClass方法应验证所有符号链接
此规范允许在链接活动时实现灵活性(并且由于递归而导致加载)发生,前提是尊重Java编程语言,即类或接口是完全完全的在初始化之前进行验证和准备,以及在链接期间检测到错误被抛出到程序中执行某些操作的位置可能需要链接到错误所涉及的类或接口。
因此,我试图创建引用第一个项目中另一个类的类T,并使用自定义类加载器创建第二个项目,该类加载器加载类T,但不加载另一个引用的类。
public class T {
public static AnotherClass field = new AnotherClass();
}
public class AnonClassLoader extends ClassLoader {
public Class findClass(String str) {
byte[] bytes = new byte[0];
try {
bytes = Files.readAllBytes(Paths.get(str));
} catch (IOException e) {
e.printStackTrace();
}
Class<?> aClass = defineClass(null, bytes, 0, bytes.length);
return aClass;
}
public static void main(String[] args) throws IOException, NoSuchMethodException, IllegalAccessException,
InvocationTargetException, InstantiationException, ClassNotFoundException {
AnonClassLoader anonClassLoader = new AnonClassLoader();
Class<?> aClass = anonClassLoader.loadClass("/Users/root/IdeaProjects/untitled/T.class", true);
System.out.println(aClass.getName());
}
}
因此,我希望尽快获得NoClassDefFound,但实际结果是-没有引发错误,类成功解决了
所以,根据错误ID:JDK-8057777 Cleanup of old and unused VM interfaces热点中没有静态解析。