春招 java static 执行顺序

Posted jianghengsh

tags:

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

 1 package static类型.执行顺序;
 2 
 3 public class Test {
 4     Person person = new Person("Test");
 5     static{
 6         System.out.println("test static");//1
 7     }
 8 
 9     public Test() {
10         System.out.println("test constructor");//5
11     }
12 
13     public static void main(String[] args) {
14         new MyClass();
15     }
16 }
17 
18 class Person{
19     static{
20         System.out.println("person static");//3
21     }
22     public Person(String str) {
23         System.out.println("person "+str);//4//6
24     }
25 }
26 
27 
28 class MyClass extends Test {
29     Person person = new Person("MyClass");
30     static{
31         System.out.println("myclass static");//2
32     }
33 
34     public MyClass() {
35         System.out.println("myclass constructor");//7
36     }
37 }

解释:
1.执行main方前会加载Test类,执行static 输出:test static
2.执行new MyClass() 先加载MyClass,但是发现继承Test,而Test已经加载过了不需要加载了,所以加载MyClass,执行static代码块,输出myclass static
3.1 加载完后MyClass要通过构造函数生成对象,但是要先初始化父类的成员变量,会执行Person person = new Person("Test");,于是要加载Person类,加载的时候执行static代码块,输出person static
3.2 然后在new Person,执行Person的构造函数,输出:person Test
4.再执行Test的构造函数,输出test constructor
5.1执行Person person = new Person("MyClass");,再次执行Person的构造函数,输出:person MyClass
5.2最后执行MyClass的构造函数,输出myclass constructor

注:针对3.2-4,5.1-5.2不论变量放在哪儿,都会先于任意一个方法的执行前执行,包括构造方法,而构造方法是一个类必须会执行的方法,不需要显示的进行调用。同时,不论变量在哪儿分布,只要在方法外部,就一定先于方法初始化。

以上是关于春招 java static 执行顺序的主要内容,如果未能解决你的问题,请参考以下文章

Java中的Static静态代码块以及各代码块之间的执行顺序

Java中的Static静态代码块以及各代码块之间的执行顺序

Java中的Static静态代码块以及各代码块之间的执行顺序

java新建对象的static块与构造器的执行顺序

java中代码执行顺序

Java类成员初始化顺序