类初始化顺序实例

Java类、实例的初始化顺序

看阿里巴巴的一道笔试题如下:

class T implements Cloneable{
	  public static int k = 0;
	  public static T t1 = new T("t1");
	  public static T t2 = new T("t2");
	  public static int i = print("i");
	  public static int n = 99;
	  
	  public int j = print("j");//相当于隐式
	  public int ding = print("ding");
	  
	  {
	      print("构造快");
	  }
	  
	  static {
	      print("静态块");
	  }
	  
	  
	  public int jie = print("jie");
	  
	  public T(String str) {
	      System.out.println((++k) + ":" + str + "  i=" + i + "  n=" + n);
	      ++n; ++ i;
	  }
	  
	  public static int print(String str){
	      System.out.println((++k) +":" + str + "   i=" + i + "   n=" + n);
	      ++n;
	      return ++ i;
	  }
	  
	  public static void main(String[] args){
	      T t = new T("init");
	  }
	}

 1:j   i=0   n=0

2:ding   i=1   n=1

3:构造快   i=2   n=2

4:jie   i=3   n=3

5:t1  i=4  n=4

6:j   i=5   n=5

7:ding   i=6   n=6

8:构造快   i=7   n=7

9:jie   i=8   n=8

10:t2  i=9  n=9

11:i   i=10   n=10

12:静态块   i=11   n=99

13:j   i=12   n=100

14:ding   i=13   n=101

15:构造快   i=14   n=102

16:jie   i=15   n=103

17:init  i=16  n=104

根据类初始化的顺序:

1、类的装载 -> 链接(验证 -> 准备 -> 解析) -> 初始化 -> 对象实例化;

红色、绿色、黄色的执行结果是在本程序源代码中下面的静态成员变量被初始化完成之前,已经有两个实例的初始化了,因此棕色代码依旧是类的初始化的过程。

2、public int j = print("j");此处相当于隐式代码,在对象初始化时候从上往下执行,如果构造函数在该代码下面先执行该代码,因为构造函数将隐式代码和构造函数看出一个整体来执行。5、10、17的执行结果是构造函数的执行结果。

3、类成员变量和代码块之间的执行顺序是先执行成员变量再执行代码块。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值