作者回复: 多谢指出!
作者回复: 谢谢你的建议!前几章不好搞太难,希望后面能够满足你的需求
作者回复: 对的!
作者回复: 其实我也有这个疑问,英文中为parent不带s,照理应该翻译为单亲。但既然约定俗成翻译为双亲,就只好这样叫啦
作者回复: 多谢建议!
作者回复: 1. 可能我翻译得有点瑕疵,导致了你的误解。这里我指的是扩展器类的 父-类加载器,而不是父类-(加载器)。
2. Java中所有的非私有实例方法,都算是虚方法。调用这些方法的指令,也区分直接调用和虚调用。下一篇我会讲到。
3. 赞一个。被final修饰的静态成员变量,如果不是基本类型或者字符串,也会放在clinit 来做。
作者回复: 类的初始化只会发生一次,你可能指的是实例的初始化?
JVM并不会直接使用.class文件,类加载链接的目的就是在JVM中创建相应的类结构,会存储在元空间(我之前用的老说法”方法区”,感谢某同学指出)。
作者回复: 加载阶段是针对单个类的,一般用到的类才会被加载。大部分情况下,不同类的加载阶段是不同的。
作者回复: 你指的是在写代码的时候如何区分对吧?我认为没法区分。如果你有一个类的两个不同版本,而且它们不兼容,那么编译时指向哪个,就按哪个来编译。也就是说,如果要同时使用两个版本,那么你需要分开编译。
作者回复: 链接时取得的不是被加载类的地址,而且被加载类所调用的其它方法的地址
作者回复: 在加载阶段就已经生成class结构了,所以我认为应该已经写入了方法区,只是被标记为未链接而暂不能使用。
作者回复: lib/ext是由扩展类加载器加载的,我文中应该也是这样讲的。