Java类的执行顺序
在Java中一个类包括:构造块、构造方法、静态块、main方法、普通方法。
通过下面的例子将看出一个类中各种方法的执行顺序:
1 /** 2 * @author zhengbinMac 3 */ 4 public class Test2 { 5 static { 6 System.out.println("静态块"); 7 } 8 public Test2() { 9 System.out.println("构造方法"); 10 } 11 { 12 System.out.println("构造块"); 13 } 14 public void ok() { 15 System.out.println("OK()"); 16 } 17 public static void main(String[] args) { 18 System.out.println("main()"); 19 Test2 t2 = new Test2(); 20 System.out.println("new Test2"); 21 t2.ok(); 22 } 23 } 24 /* 25 静态块 26 main() 27 构造块 28 构造方法 29 new Test2 30 OK() 31 */
可以得出:首先JVM加载这个类(执行静态块)-》执行类的入口main方法-》构造块-》构造方法-》执行调用方法
如果有父类呢?JVM首先会检查当前类的父类是否加载,若没有则加载其父类,然后再加载自己,通过下面的测试说明:
1 /** 2 * @author zhengbinMac 3 */ 4 public class Son extends father { 5 { 6 System.out.println("Son-构造块"); 7 } 8 static { 9 System.out.println("Son-静态块"); 10 } 11 public Son() { 12 System.out.println("Son-构造方法"); 13 } 14 15 @Override 16 public void t1() { 17 System.out.println("Son()"); 18 } 19 public static void main(String[] args) { 20 System.out.println("main()"); 21 Son t = new Son(); 22 t.t1(); 23 } 24 } 25 26 class father { 27 { 28 System.out.println("Father-构造块"); 29 } 30 31 static { 32 System.out.println("Father-静态块"); 33 } 34 35 public father() { 36 System.out.println("Father-构造方法"); 37 } 38 39 public void t1() { 40 System.out.println("Father()"); 41 } 42 }
// 输出 /* Father-静态块 Son-静态块 main() Father-构造块 Father-构造方法 Son-构造块 Son-构造方法 Son() */
其中静态块,用static关键字声明,JVM加载类时执行,仅执行一次。
其中构造块,类中直接用{}声明,在每次创建对象时执行。
注意,静态块会按照声明的顺序执行。如下面这两个例子:
梦想要一步步来!