全心思齐网

defineClass,loadClass,findClass它们有什么区别?

loadClass();是加载 类名.class 字节码文件的工具 findClass();是类加载器在JVM内部实现查找指定路径下的 . class 文件的机制,BootStrap ,ExtClassLoader,AppClassLoader,按照这个顺序查找,有就给JVM加载,没有就往下找, 在基础加强里,张老师 就是复写了该方法,将指定目录下的字节码文件,通过ByteArrayOutputStream 解密后的字节码文件,给JVM 去加载,实现解密的过程 defineClass();是将你定义的字节码文件经过字节数组流解密之后,将该字节流数组生成字节码文件,也就是该类的 文件的类名.class, 注意一点,视频里用的是过时的方法,defineClass( byte[] b ,0, b.length) ,这样生成的字节码就是默认的字节码文件。 他的替代方法是 defineClass(String name , byte[] b , 0, b.length ),声明时,name 是指定该类名,这里的类名是指包含它所属的 包名+类名

匿名回答于2024-06-01 22:45:42


相关知识问答