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