Java类与对象的初始化

发表于:2012-5-25 09:26

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

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

  面试的时候,经常会遇到这样的笔试题:给你两个类的代码,它们之间是继承的关系,每个类里只有构造器方法和静态块,它们只包含一些简单的输出字符串到控制台的代码,然后让我们写出正确的输出结果。这实际上是在考察我们对于类的初始化知识的了解。

  首先,我们先看看下面的代码,这就是很经典的考察方式。

  1. public class InitField {  
  2.     public static void main(String[] args) {  
  3.         SuperInitField p = new SuperInitField();  
  4.         SuperInitField c = new SubInitField();  
  5.     }  
  6. }  
  7. class SuperInitField {  
  8.     public SuperInitField() {  
  9.         System.out.println("parent");  
  10.     }  
  11.     static {  
  12.         System.out.println("static parent");  
  13.     }  
  14. }  
  15. class SubInitField extends SuperInitField {  
  16.     public SubInitField() {  
  17.         System.out.println("child");  
  18.     }  
  19.     static {  
  20.         System.out.println("static child");  
  21.     }  
  22. }

  不管你是否能很快速的写出正确的答案,我们先把这个程序放一边,了解一下Java虚拟机初始化的原理。

  JVM通过加装、连接和初始化一个Java类型,使该类型可以被正在运行的Java程序所使用。类型的生命周期如下图所示:

  装载和连接必须在初始化之前就要完成。

  类初始化阶段,主要是为类变量赋予正确的初始值。这里的“正确”初始值指的是程序员希望这个类变量所具备的起始值。一个正确的初始值是通过类变量初始化语句或者静态初始化语句给出的。初始化一个类包含两个步骤:

  1)如果类存在直接超类的话,且直接超类还没有被初始化,就先初始化直接超类。

  2)如果类存在一个类初始化方法,就执行此方法。

  那什么时候类会进行初始化呢?Java 虚拟机规范为类的初始化时机做了严格定义:在首次主动使用时初始化。

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

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号