潍坊市论坛

首页 » 分类 » 问答 » Java初始代码块,实例变量,构造器的初
TUhjnbcbe - 2021/5/21 17:21:00


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


  1publicclassInitTest{


  2inta=3;


  3{


  4a=1;


  5}


  6InitTest(){


  7a=2;


  8}


  9publicstaticvoidmain(String[]args){


  10InitTestit=newInitTest();


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


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


  13}


  14}


  1publicclassInitTest{


  2//代码1


  3{


  4a=1;


  5}


  6//代码2


  7inta=3;


  8


  9publicstaticvoidmain(String[]args){


  10InitTestit=newInitTest();


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


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


  13}


  14}


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


  1publicclassInitTest{


  2//1


  3static{


  4a=1;


  5}


  6//2


  7publicstaticinta=3;


  8


  9publicstaticvoidmain(String[]args){


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


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


  12}


  13}

文章链接:

1
查看完整版本: Java初始代码块,实例变量,构造器的初