假设有个Dog类
一个例子:
package 概念题;
/**
* @author hwy1782@gmail.com
* @creation date 2010-9-11 下午03:48:15
*
*/
class X {
Y b = new Y();
X() {
System.out.print(" x ");
}
}
class Y {
Y() {
System.out.print(" y ");
}
}
public class Z extends X {
Y y = new Y();
Z() {
System.out.print(" z ");
}
public static void main(String[] args) {
new Z();
}
}
在 Z 这个类中没有静态的方法和静态域,直到遇到new Z(),才会发生初始化。因为 z 继承自 x,所以在new z 这个对象之前,需要先初始化 x 这个对象。即调用 new x()这个方法。
new x() 的步骤如上图所示:
1. 在堆上为x分配足够的空间。
2. 存储空间上的值被清零。(基本类型为默认值,引用为null)(即此处,x 的成员变量 y 的引用为 null)
3. 执行所有出现于字段定义处的初始化动作。(即此处为: y = new y() )。
4. 执行构造器。(即执行 x = new x() )。
对 Z 这个类的操作类似于 Z 。
故本例结果为:
y x y z
- 大小: 83.1 KB
分享到:
相关推荐
介绍一下java程序初始化的顺序,这会对您以后的开发所有帮助
本篇文章主要介绍了Spring 中如何控制2个bean中的初始化顺序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
详细讲解java类中静态变量,普通标量,对象、基本类型的初始化顺序。
对java类初始化以及顺序,详解,由于转载仅供大家参考!
一个java代码初始化具体过程的的demo
具体内容见博客
Java初始化顺序1
“礼让”原则学习Java对象初始化顺序
作为一名程序员必须知道Java初始化顺序......
详细介绍了Java的静态成员变量、静态数据块、非静态成员变量和非静态成员变量等初始化顺序
java面试题-类的初始化顺序.doc 大家在去参加面试的时候,经常会遇到这样的考题:给你两个类的代码,它们之间是继承的关系,每个类里只有构造器方法和一些变量,构造器里可能还有一段代码对变量值进行了某种运算,...
在Java中,类装载器把一个类装入Java虚拟机中,要经过三个步骤来完成:装载、链接和初始化,网上关于Java中对象初始化顺序的文章很多,这篇文章我们将详细介绍Java中对象初始化顺序。有需要的可以参考学习。
java 静态_非静态 字段_方法_代码块 子类父类构造_初始化顺序! 三个class 让你清清楚楚 第一个class java代码如下: package initialOrder; class Parent { // 静态变量 public static String p_StaticField...
对于静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化顺序依次是(静态变量、静态初始化块)>(变量、初始化块)>构造器
C++和Java初始化顺序的比较代码, 详细的解说请参考博客地址, http://blog.csdn.net/ostrichmyself/archive/2010/11/25/6035538.aspx
java对象的初始化顺序[参考].pdf
网上有很多关于Java中class的初始化顺序文章,但是本文通过图文更加详细的介绍了Java中class的初始化顺序,并对class的装载顺序进行了讲解,下面一起来看看。
java类中静态域、块,非静态域、块,构造函数的初始化顺序,通过本例子,能够清楚了解到java类的初始化顺序
所有代码块是从上往下顺序执行的,所以代码块里面使用到的变量如果在块下面初始化会有问题 执行构造方法中内容。 所以看见的空构造方法,只能说第三部没有需要执行的内容。 下面举例子 public class TestClass { ...