静态代码块静态变量等执行顺序

Posted Talk is cheap. Show me the cod

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了静态代码块静态变量等执行顺序相关的知识,希望对你有一定的参考价值。

 1 public class BasicTest {
 2     public static void main(String[] args) {
 3         System.out.println("m1:");
 4         Mimi m1=new Mimi();
 5         System.out.println("m2:");
 6         Mimi m2=new Mimi();
 7     }
 8 }
 9 
10 class Mimi {
11     public static int si=0; 
12     int di=si;
13     static{
14         //首先执行
15         si++;
16         System.out.println("static block1: si="+si);
17     }
18     
19     {
20         //si*=2;
21         System.out.println("block2: si="+si+", di="+di);
22     }
23     
24     static{
25         //首先执行
26         si++;
27         System.out.println("static block2: si="+si);
28     }
29 
30     public Mimi() {
31         di=10;
32         System.out.println("constructor: si="+si+", di="+di);
33         si=500;
34     }
35 }

执行顺序是:

静态成员变量初始化

静态代码块调用

动态成员变量初始化

非静态代码块调用

构造方法调用

以下供练习:

 1 public class TestPerson {
 2 
 3     public static void main(String[] args) {
 4         // TODO Auto-generated method stub
 5         Person person = new Person();
 6         Person person2 = new Person();
 7     }
 8 
 9 }
10 
11 class Person {
12     public final String name;
13     public int age;    
14 
15     public Person() {
16         System.out.println("无参构造方法");
17     }
18 
19     {
20         System.out.println("代码块2");
21     }
22 
23     {
24         System.out.println("代码块1");
25         name = "小明";
26     }
27 
28     static {
29         System.out.println("静态代码块2");
30     }
31 
32     static {
33         System.out.println("静态代码块1");
34     }
35 
36     
37 
38     public Person(int age) {
39         this.age = age;
40         //this.name = "";
41         System.out.println("构造age方法");
42     }
43 
44     public void goToSchool() {
45         System.out.println(name + "goToSchool方法");
46     }
47 }

结果:

静态代码块2
静态代码块1
代码块2
代码块1
无参构造方法
代码块2
代码块1
无参构造方法

以上是关于静态代码块静态变量等执行顺序的主要内容,如果未能解决你的问题,请参考以下文章

java代码块,静态代码块,静态变量,构造方法执行顺序

Java类的各种成员初始化顺序如:父子类继承时的静态代码块,普通代码块,静态方法,构造方法,等先后顺

静态代码块静态变量构造方法及构造块执行顺序

Java普通代码块,构造代码块,静态代码块区别,执行顺序的代码实例

Java(静态)变量和(静态)代码块的执行顺序

关于静态块静态属性构造块构造方法的执行顺序