码迷,mamicode.com
首页 > 编程语言 > 详细

【春招】 java static 执行顺序

时间:2020-03-06 19:57:38      阅读:63      评论:0      收藏:0      [点我收藏+]

标签:tor   class   cto   package   stat   const   out   顺序   函数   

 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 执行顺序

标签:tor   class   cto   package   stat   const   out   顺序   函数   

原文地址:https://www.cnblogs.com/jianghengsh/p/12430153.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!