4条指令的最常见的 Java代码场景是:
使用 new关键字实例化对象的时候
读取或设置一个类的静态字段的时候(即在字节码中,执行getstalic或putstatic指令时),被final修饰、已在编译期把结果放入常量池的静态字段除外...调用一个类的静态方法的时候(即在字节码中执行invokestatic指令时)。..., 编译器收集的顺序是由语句在源文件中出现的顺序所决定的, 静态语句块中只能访问到定义在静态语句块之前的变量, 定义在它之后的変量 , 在前面的静态语句块可以赋值 , 但是不能访问
()...方法与类的构造函数 (或者说实例构造器()方法)不同,它不需要显式地调用父类构造器, 虚期机会保证在子类的()方法执行之前, 父类的()方法已经执行完毕, 因此在虚期机中第一个被执行的..., 如果一个类中没有静态语句块,也没有对变量的赋值操作, 那么编译器可以不为这个类生成()方法
接口中不能使用静态语句块,但仍然有变量初始化的赋值操作, 因此接口与类一样都会生成<clinit