resolveClass不能解析符号引用

时间:2019-10-04 16:40:19

标签: java classloader

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,但实际结果是-没有引发错误,类成功解决了

1 个答案:

答案 0 :(得分:0)

所以,据 错误ID:JDK-8057777 Cleanup of old and unused VM interfaces 热点中没有静态解析。

与此同时,在hotspot中,jdk 8本机函数没有实现