字节码中的两个方法,

<init>方法

在JVM层面每个构造方法都有一个特殊的名字叫<init>,这个名字是在编译器中就提供了的, 因为<init>不规范的java命名,因此咱们在java代码里是无法直接使用的,一个实例的初始化方法在虚拟机中是经过调用invokespecial指令来完成的。 java

<clinit>方法

一样对于类或者接口的静态程序块,在JVM层面也给了他一个特殊的名字<clinit>,不管是类或者接口在被加载到class loader的时候,Java虚拟机都会调用这个类或接口的<clinit>的方法,这个方法是个无参的,返回类型为void方法,这个方法名也是编译器指定的,因为这个方法名并非一个规范的方法名,因此咱们没法在代码中直接使用。 spa

说了这么多,其实读到这里只要记住两点:在字节码层面<init>表示构造方法,<clinit>表示静态程序块。 接口

ref:The JavaTM Virtual Machine Specification(Second Edition) 3.9 Specially Named Initialization Methods ci