buptys

我的学习记录

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

前两天网易的笔试把大家都虐的不行呀哈哈。

咳咳,还是言归正传,话说之间觉得java的对象类这一块掌握的还算OK的,仔细思考,发现还是有很多细节问题没有深入思考。

上代码~

 1 public class B extends A {
 2     public int m = method3();
 3     public static int n = method4();
 4     public int t = 0;
 5 
 6     public B() {
 7         System.out.println(4);
 8     }
 9 
10     public int method3() {
11         System.out.println(5);
12         return 5;
13     }
14 
15     public static int method4() {
16         System.out.println(6);
17         return 6;
18     }
19 
20     public static void main(String[] args) {
21         // TODO Auto-generated method stub
22         System.out.println(7);
23         A a = new B();
24     }
25 }
26 
27 
28 public class A {
29     public int i = method();
30     public static int j = method2();
31     public int k = 0;
32     public A() {
33     System.out.println(1);
34     }
35     public int method() {
36         System.out.println(2);
37         return 2;
38     }  39     public static int method2() {
40         System.out.println(3);
41         return 3;
42     }    
43 }

将上述代码运行,显示的结果是:

3
6
7
2
1
5
4

一步一步的运行代码,便可从中了解初始化的顺序:

1.对父类的静态(static)变量初始化,对子类的静态变量初始化;依次输出3,6;

2.运行main函数,执行System.out.println(7);语句;输出7;

3.执行A a = new B();语句;

4.执行上一条语句会导致如下操作:

   4.1转入到父类A构造方法,在执行父类构造方法的语句之前会依次初始化父类里面的普通变量;在初始化i时,输出2;

   4.2执行父类A构造方法里面的语句;输出1;

   4.1转入子类B构造方法,在执行子类构造方法的语句之前会依次初始化子类里面的普通变量;在初始化m时,输出5;

   4.2执行子类B构造方法里面的语句;输出4;

 

对上面的输出顺序我们可以做一个总结

1.静态变量会在最先进行初始化;

2.在new一个新的对象时,会先处理父类的语句,再处理子类的语句;

2.调用构造函数,会先对类里面的普通变量进行初始化,再执行构造函数里面的语句。

posted on 2016-03-25 10:54  buptys  阅读(210)  评论(0编辑  收藏  举报