Java类变量和成员变量初始化过程

发表于:2012-4-11 09:36

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:lmtoo    来源:51Testing软件测试网采编

  昨天看了一本叫做《突破程序员基本功的16课》的书,个人感觉还可以,主要对Java的技巧进行了一些深入的讲解,让我对类的初始化和对象的创建有了新的认识。

  一、类的初始化

  对于类的初始化:类的初始化一般只初始化一次,类的初始化主要是初始化静态成员变量。

  类的编译决定了类的初始化过程。

  编译器生成的class文件主要对定义在源文件中的类进行了如下的更改:

  1)先按照静态成员变量的定义顺序在类内部声明成员变量。

  2)再按照原java类中对成员变量的初始化顺序进行初始化。

  一个java类和编译后的class对应的转换如下:

  源文件:

  1. public class Person{  
  2. public static String name="张三";  
  3. public static int age;  
  4. static{  
  5.        age=20;  
  6. System.out.println("初始化age");  
  7. }  
  8. public static String address;  
  9. static{  
  10. address="北京市";  
  11. age=34;  
  12. }  
  13. public static void main(String[] args) {  
  14.                    System.out.println(name);  
  15.                    System.out.println(age);  
  16.                    System.out.println(address);  
  17.          }  
  18. }

  当java源代码转换成一个class文件后,其转换成类似下面的代码:

  1. public class Person{  
  2. public static String name;  
  3. public static int age;  
  4. public static String address;  
  5. static{  
  6. name="张三";  
  7. age=20;  
  8. System.out.println("初始化age");  
  9. address="北京市";  
  10. age=34;  
  11. }  
  12. public static void main(String[] args) {  
  13.                    System.out.println(name);  
  14.                    System.out.println(age);  
  15.                    System.out.println(address);  
  16.          }  
  17. }

  初始化顺序依据转换后对应的class类成员变量的初始化顺序依次执行,所以所有的静态成员变量都是先声明,后执行赋值的,而且赋值的顺序也是依照源代码对静态成员变量初始化的顺序进行的,注意:定义一个成员变量并直接初始化与在静态代码块中进行初始化是等价的,都是依据它们在源代码中定义的顺序进行的。

21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号