java 代码块初始化_Java初始代码块,实例变量,构造器的初始化顺序

当java创建一个对象时,先为该对象的所以实例变量分配栈内存(已加载类的前提),然后执行实例变量的初始化,其初始化顺序是,先执行初始化块 或 声明实例变量时的初始值(具体执行顺序根据源码实际的排序顺序而定),然后再执行构造器声明的初始值。

85252998a2bb913134bbb18c10a5dc78.png

1 public class InitTest {

2 int a=3;

3 {

4 a=1;

5 }

6 InitTest(){

7 a=2;

8 }

9 public static void main(String[] args) {

10 InitTest it = new InitTest();

11//输出2,因为构造器再次指定初始值

12 System.out.println(it.a);

13 }

14 }

1 public class InitTest {

2//代码1

3 {

4 a=1;

5 }

6//代码2

7 int a=3;

8

9 public static void main(String[] args) {

10 InitTest it = new InitTest();

11//输出3,因为实例变量再次指定初始值。若代码1和代码2对调位置,则输出1

12 System.out.println(it.a);

13 }

14 }

♦ 静态初始化块类似,jvm第一次主动使用某个类时,会在类准备阶段为该类的静态成员变量分配内存,在初始化阶段初始化这些成员变量,初始化执行的顺序和源码的排序相同。

1 public class InitTest {

2 //1

3 static{

4 a=1;

5 }

6 //2

7 public static int a=3;

8

9 public static void main(String[] args) {

10//输出3,因为实例变量再次指定初始值。若1和2对调位置,则输出1

11 System.out.println(InitTest.a);

12 }

13 }

文章链接:https://www.cnblogs.com/xiuzhu/p/8711612.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值