gpt4 book ai didi

java - 将字节数组作为类加载到Java系统包中

转载 作者:行者123 更新时间:2023-12-02 03:28:54 30 4
gpt4 key购买 nike

任何人都知道如何类加载动态生成的字节码,该字节码预计位于 Java 系统类包中(包名称以 java.lang.... 开头)。

public class ByteCodeClassLoader extends ClassLoader{
public static Class<?> run(String className, byte[] b){
....
return load(className, b);
}
public Class<?> load(String className, byte[] b){
.............
Class<?> expClass = null;
synchronized(this){
expClass =defineClass(className, b, 0, b.length);
}
return expClass;

return null;
}

当我尝试运行代码(className 是 java/lang/invoke/DYNGuardWithTestHandle0)时,它会抛出异常:

java.lang.NoClassDefFoundError: java/lang/invoke/DYNGuardWithTestHandle0
at java.lang.ClassLoader.defineClassImpl(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:346)
at java.lang.ClassLoader.defineClass(ClassLoader.java:283)
at java.lang.invoke.ByteCodeClassLoader.load(ByteCodeClassLoader.java:83)
at java.lang.invoke.ByteCodeClassLoader.run(ByteCodeClassLoader.java:54)

谢谢。

<小时/>

给定名称为 java/lang/invoke/DYNGuardWithTestHandle0,而 byte[] 流中的类名称为 java.lang.invoke.DYNGuardWithTestHandle0。使两者一致后,类加载仍然会失败,因为包 java.lang 是 protected 包。

最佳答案

defineClass() 的 Javadoc说:

Throws NoClassDefFoundError if name is not equal to the binary name of the class specified by [byte array]

关于java - 将字节数组作为类加载到Java系统包中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38385148/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com