java类变量的初始化顺序_Java类变量、实例变量的初始化顺序

题目:

public class InitTest{

public static int k = 0;

public static InitTest t1 = new InitTest("t1");

public static InitTest t2 = new InitTest("t2");

public static int i = print("i");

public static int n = 99;

public int j = print("j");

{

print("Creat");

}

static {

print("Static");

}

public InitTest(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){

InitTest t = new InitTest("init");

}

}

输出结果:

1:j   i=0   n=0

2:Creat   i=1   n=1

3:t1    i=2  n=2

4:j   i=3   n=3

5:Creat   i=4   n=4

6:t2    i=5  n=5

7:i   i=6   n=6

8:Static   i=7   n=99

9:j   i=8   n=100

10:Creat   i=9   n=101

11:init    i=10  n=102

类记载过程:加载 -> 链接(验证 -> 准备 -> 解析) -> 初始化 -> 实例化

其中准备过程会给static成员变量赋初值,一般为0,如果是static final的话为所赋的值

另外,实例化不一定发生在完全初始化之后,因为某些初始化伴随着实例化。

类实例化过程:父类 构造块/实例变量->父类 构造方法 -> 子类 构造块/实例变量->子类 构造方法。

原因在于构造方法中可能就需要使用到实例变量,因此这个时候实例变量一定要先完成初始化操作。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值