Java中的构造代码块
代码块
----a静态代码块
----b构造代码块
----c普通代码块
执行顺序:(优先级从高到低。)静态代码块>mian方法>构造代码块>构造方法。
a.静态代码块:
静态代码块在加载该类的时候执行,且只执行一次!
1 class Test{ 2 public static void main(String args[]) 3 { 4 Demo d1=new Demo();Demo d2=new Demo(); 5 6 } 7 } 8 9 class Demo{ 10 static{ 11 System.out.println("这是一个静态代码块,看我会执行几次"); 12 } 13 } 14 15 16 //运行结果 17 //这是一个静态代码块,看我会执行几次
b.构造代码块,执行顺序大于构造方法
b.1.java编译器编译生成一个java文件时,会把变量声明移动到一个类的最前端。
b.2.java中的成员变量初始化其实都是在构造函数中执行的。
b.3.java编译器编译时,会把构造代码块中的代码移到构造函数中执行,并且,原本构造函数中的方法是在最后执行的。(Demo2运行没有出错,证明了这点,也可以反编译)
b.4.成员变量的显示初始化和构造代码块中的代码是按代码的先后顺序来执行的。(比较Demo3和Demo4)
//主函数
public class Test{ public static void main(String[] args) { Demo d=new Demo(); System.out.println(d.i); } } //Demo1 //执行结果i=30000; public class Demo { int i=10000; { i=20000; } public Demo() { i=30000; } } //Demo2 //执行结果i=30000; public class Demo { { i=20000; } public Demo() { i=30000; } int i=10000; } //Demo3 //执行结果i=10000; public class Demo { { i=20000; } public Demo() { // i=30000; } int i=10000; } //Demo4 //执行结果i=20000; public class Demo { int i=10000; { i=20000; } public Demo() { // i=30000; } }
普通代码块,作用不大,唯一的作用就是让里面的变量资源尽快被释放
//普通代码块
public class Test{ public static void main(String[] args) { { System.out.println("我是一个普通的代码块"); } }
}