类初始化和对象初始化

当Java源代码(.java文件)被编译器编译成Java字节码(.class文件)时,会自动产生两个方法,一个是类的初始化方法<clinit>,另一个是对象实例的初始化方法<init>。
但需要注意的是,并不是所有的类的.class文件中都拥有一个<clinit>()的,
如果类没有声明任何类变量(类变量即静态变量,被static修饰的变量。类的成员变量包含静态变量和普通成员变量),也没有静态初始化语句,那么就不会有<clinit>();
如果类仅包含静态final变量的类变量初始化语句,并且这类类变量初始化语句采用编译时常量表达式,则类也不会有<clinit>方法。

<clinit>():在JVM第一次加载.class文件到内存时调用。包括静态变量初始化语句 和 静态代码块的执行

<init>():在对象实例创建出来的时候调用。

转载自:https://www.jianshu.com/p/d0c29f9007c3
作者:小阿拉

来源:简书

posted @ 2020-09-04 14:45  星峰之耀  阅读(62)  评论(0编辑  收藏  举报