[讨论] ClassLoader的loadClass方法疑惑
djj2007
2012-12-18
ClassLoader中有一个方法loadClass(String name,boolean resolve),在看深入java虚拟机时,作者说1.2版本以后,resolve参数已经无效,就算设置为true,虚拟机也不一定会执行类初始化方法块,虚拟机规范将这个是否执行的权限交由特定的虚拟机来实现,而不做强制的规定。
是这样的吗? |
|
RednaxelaFX
2012-12-18
那个参数根据JavaDoc所说确实不强制要求VM对指定的class做link咯。
http://docs.oracle.com/javase/7/docs/api/java/lang/ClassLoader.html#loadClass(java.lang.String,%20boolean) 引用 If the class was found using the above steps, and the resolve flag is true, this method will then invoke the resolveClass(Class) method on the resulting Class object.
http://docs.oracle.com/javase/7/docs/api/java/lang/ClassLoader.html#resolveClass(java.lang.Class) 引用 Links the specified class. This (misleadingly named) method may be used by a class loader to link a class. If the class c has already been linked, then this method simply returns. Otherwise, the class is linked as described in the "Execution" chapter of The Java™ Language Specification.
|
|
djj2007
2012-12-19
resolve的说明里,是说按照java语言规范的执行一章来实现。
java语言规范将连接的权限交由具体虚拟机,具体虚拟机可能提早或者延迟对类进行初始化,是这个意思吗? |
|
RednaxelaFX
2012-12-19
引用的文档的关键点是“may be”。也就是说这个方法有没有实际效果都行,API层面没强制规定。所以虚拟机决定什么时候link其实都可以,至少这个方法不保证类一定会被link
|
|
djj2007
2012-12-19
RednaxelaFX 写道 引用的文档的关键点是“may be”。也就是说这个方法有没有实际效果都行,API层面没强制规定。所以虚拟机决定什么时候link其实都可以,至少这个方法不保证类一定会被link
多谢R大~~ |
相关讨论
相关资源推荐
- ClassLoader初探:loadclass之后调用成员方法的正确方式
- JVM类加载器解惑——loadClass(name)和findClass方法
- 简单总结Class.forName("").newinstance()和new()以及classLoader.loadClass("")的区别
- java class类 方法_关于Class类中的几个方法的解释
- Java类加载器 — classloader 的原理及应用
- 类加载器classloader
- 一个ClassLoader引起的JNI链接错误
- Class.getResource()、ClassLoader.getResource()源码解读
- 深入分析ClassLoader
- Java语言十五讲——第二讲 ClassLoader