JVM加载机制详解(8)
2023-05-02 来源:飞速影视
1.3.4 <cinit>与<init>
<cinit> 方法和 <init> 方法有什么区别? 主要是为了让你弄明白类的初始化和对象的初始化之间的差别。
public class ParentA { static { System.out.println("1"); } public ParentA() { System.out.println("2"); }}class SonB extends ParentA { static { System.out.println("a"); } public SonB() { System.out.println("b"); } public static void main(String[] args) { ParentA ab = new SonB(); ab = new SonB(); }}
答案如下:
1a2b2b
其中 static 字段和 static 代码块,是属于类的,在类的加载的初始化阶段就已经被执行。类信息会被存放在方法区,在同一个类加载器下,这些信息有一份就够了,所以上面的 static 代码块只会执行一次,它对应的是 方法。
所以,上面代码的 static 代码块只会执行一次,对象的构造方法执行两次。再加上继承关系的先后原则,不难分析出正确结果。 结论: 方法 的执行时期: 类初始化阶段(该方法只能被jvm调用, 专门承担类变量的初始化工作) ,只执行一次 方法 的执行时期: 对象的初始化阶段
2 类加载器
2.1 类加载器的作用
类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。
本站仅为学习交流之用,所有视频和图片均来自互联网收集而来,版权归原创者所有,本网站只提供web页面服务,并不提供资源存储,也不参与录制、上传
若本站收录的节目无意侵犯了贵司版权,请发邮件(我们会在3个工作日内删除侵权内容,谢谢。)
www.fs94.org-飞速影视 粤ICP备74369512号