在编译生成class文件时,编译器会产生两个方法加于class文件中,一个是类的初始化方法<clinit>, 另一个是实例的初始化方法<init>。
<clinit>:
在jvm第一次加载class文件时调用,包括静态变量初始化语句和静态块的执行
<init>:
在实例创建出来的时候调用
包括:
new操作符;
普通代码块
调用Class或java.lang.reflect.Constructor对象的newInstance()方法;调用任何现有对象的clone()方法;
通过java.io.ObjectInputStream类的getObject()方法反序列化。
<span style="font-size:14px;">public class Main {
static {
System.out.println("cinit");
}
{
System.out.println("init");//实例化构造器,
}
public static void main(String [] args)
{
new Main();
new Main();
String a="aaaaa....。。。....。。。.....。.。.。..。........>>。.........0ddddd";
System.out.println(a.split(".").length);
}
}</span>
输出:
cinit
init
init
0