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加载类时执行,仅执行一次。

  其中构造块,类中直接用{}声明,在每次创建对象时执行。

  注意,静态块会按照声明的顺序执行。如下面这两个例子:

原文地址:https://www.cnblogs.com/zhengbin/p/5671163.html