下面是《深入理解Java虚拟机》中自定义类加载器的一个例子,请问哪一行代码对应将字节码加载到方法区的过程啊?还是说在defineClass方法中在创建Class对象之前完成了这项工作?
下面是《深入理解Java虚拟机》中自定义类加载器的一个例子,请问哪一行代码对应将字节码加载到方法区的过程啊?还是说在defineClass方法中在创建Class对象之前完成了这项工作?
就是defineClass方法
classloader中的方法大体分为三大类:loadClass/findClass/defineClass。loadClass是直接被开发者调用的,主要实现双亲委托机制,如果parent没有加载话就调用findClass,findClass是定义查询class文件的逻辑的,所以一般自定义classloader都是重写这个方法,findClass获取到class文件的字节码后,调用各种defineClass来完成类加载,返回class对象
这里需要注意,通常不会像你给的例子里那样直接重写loadClass方法,因为会破坏双亲委托机制,导致很多问题
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
3 回答1.7k 阅读✓ 已解决
defineClass方法就是将读取到的类的class文件,生成class对象。生成class对象的过程中,就包含将字节码加载到方法区。