类加载过程(clinit()),对象实例化过程(init())

Posted javatalk

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了类加载过程(clinit()),对象实例化过程(init())相关的知识,希望对你有一定的参考价值。

类加载过程:

1、类加载就是执行Java程序编译之后在字节码文件中生成的clinit()方法(称之为类构造器),clinit()方法由静态变量和静态代码块组成。

2、子类的加载首先需要先加载父类,如果父类为接口。则不会调用父类的clinit方法。一个类中可以没有clinit方法。

3、clinit方法中的执行顺序为:父类静态变量初始化,父类静态代码块,子类静态变量初始化,子类静态代码块。

4、clinit()方法只执行一次。

对象实例化过程:

1、对象实例化过程就是执行Java程序编译之后在字节码文件中生成的init()方法(称之为实例构造器),init()方法由非静态变量、非静态代码块以及对应的构造器组成。

2、init()方法可以重载多个,有几个构造器就有几个init()方法,每次创建实例,调用哪一个构造器,就会调用相应的init()方法。

3、init()方法中的执行顺序为:父类变量初始化,父类代码块,父类构造器,子类变量初始化,子类代码块,子类构造器。

 

clinit()方法优先于init()方法执行,所以整个顺序就是:

父类静态变量初始化,父类静态代码块,子类静态变量初始化,子类静态代码块,父类非静态变量初始化,父类非静态代码块,父类构造器,子类非静态变量初始化,子类非静态代码块,子类构造器。

 

以上是关于类加载过程(clinit()),对象实例化过程(init())的主要内容,如果未能解决你的问题,请参考以下文章

详解JAVA对象实例化过程

JVM思考-init和clinit区别

JVM总括四-类加载过程双亲委派模型对象实例化过程

JAVA虚拟机系列三-类加载过程双亲委派模型对象实例化过程

类加载机制与对象初始化

JVM总括四-类加载过程双亲委派模型对象实例化