详解Java类的生命周期

发表于:2012-5-07 10:19

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

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

分享:

  类的初始化过程是这样的:按照顺序自上而下运行类中的变量赋值语句和静态语句,如果有父类,则首先按照顺序运行父类中的变量赋值语句和静态语句。先看一个例子,首先建两个类用来显示赋值操作:

  1. public class Field1{  
  2.     public Field1(){  
  3.         System.out.println("Field1构造方法");  
  4.     }  
  5. }  
  6. public class Field2{  
  7.     public Field2(){  
  8.         System.out.println("Field2构造方法");  
  9.     }  
  10. }

  下面是演示初始化顺序的代码:

  1. class InitClass2{  
  2.     static{  
  3.         System.out.println("运行父类静态代码");  
  4.     }  
  5.     public static Field1 f1 = new Field1();  
  6.     public static Field1 f2;   
  7. }  
  8.  
  9. class SubInitClass2 extends InitClass2{  
  10.     static{  
  11.         System.out.println("运行子类静态代码");  
  12.     }  
  13.     public static Field2 f2 = new Field2();  
  14. }  
  15.  
  16. public class Test2 {  
  17.     public static void main(String[] args) throws ClassNotFoundException{  
  18.         new SubInitClass2();  
  19.     }  
  20. }

  上面的代码中,初始化的顺序是:第03行,第05行,第11行,第13行。第04行是声明操作,没有赋值,所以不会被运行。而下面的代码:

  1. class InitClass2{  
  2.     public static Field1 f1 = new Field1();  
  3.     public static Field1 f2;  
  4.     static{  
  5.         System.out.println("运行父类静态代码");  
  6.     }  
  7. }  
  8.  
  9. class SubInitClass2 extends InitClass2{  
  10.     public static Field2 f2 = new Field2();  
  11.     static{  
  12.         System.out.println("运行子类静态代码");  
  13.     }  
  14. }  
  15.  
  16. public class Test2 {  
  17.     public static void main(String[] args) throws ClassNotFoundException{  
  18.         new SubInitClass2();  
  19.     }  
  20. }

  初始化顺序为:第02行、第05行、第10行、第12行,各位可以运行程序查看结果。

  在类的初始化阶段,只会初始化与类相关的赋值语句和静态语句,也就是有static关键字修饰的信息,没有static修饰的赋值语句和静态语句在实例化对象的时候才会运行。

  使用

  类的使用包括主动引用和被动引用,主动引用在初始化的章节中已经说过了,下面我们主要来说一下被动引用:

  ● 引用父类的静态字段,只会引起父类的初始化,而不会引起子类的初始化。

  ● 定义类数组,不会引起类的初始化。

  ● 引用类的常量,不会引起类的初始化。

43/4<1234>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号