java中对象的初始化顺序

class HelloA {
public HelloA() {
System.out.println("HelloA");
}
{ System.out.println("I‘m A class"); }
static { System.out.println("static A"); }
}
public class HelloB extends HelloA {
public HelloB() {
System.out.println("HelloB");
}
{ System.out.println("I‘m B class"); }
static { System.out.println("static B"); }
public static void main(String[] args) {
System.out.println("main() start");
new HelloB();
System.out.println("main() end");
}
}

运行结果为:

static A
static B
main() start
I‘m A class
HelloA
I‘m B class
HelloB
main() end

对象的初始化顺序:(1)类加载之后,按从上到下(从父类到子类)执行被static修饰的语句;(2)当static语句执行完之后,再执行main方法;(3)如果有语句new了自身的对象,将从上到下执行构造代码块、构造器(两者可以说绑定在一起)。

原文地址:https://www.cnblogs.com/kavins/p/8514509.html

时间: 2024-08-02 02:48:13

java中对象的初始化顺序的相关文章

java中对象的初始化过程

class Parent{ int num = 8;// ->3 Parent(){ //super(); // ->2 //显示初始化 // ->3 //构造代码段 // ->4 show(); // ->5 } {// ->4 System.out.println("Parent constructor code run->"); } public void show(){//被覆盖 System.out.println("num

java中对象的初始化问题

最近又把java编程思想看了看.又有些收获.此书确实不错 java中的初始化相信很多人都知道.但是具体的初始化步骤,初始化几次确不一定.上代码 public class A{ public static A a = new A(); public static int i; public static int j= 2; public A(){ i++; j++; } public static void main(String[] args){ A a1= new A(); System.ou

[百度空间] [转] 在 Visual C++ 中控制全局对象的初始化顺序

from: http://blog.csdn.net/classfactory/archive/2004/08/07/68202.aspx 在 C++ 中,同一个翻译单位(.cpp文件)里的全局对象的初始化顺序是先定义的对象先初始化(同时也后析构),但 C++ 标准并没有规定不同翻译单位间全局对象的初始化顺序.按照这个分析,以下的代码可能工作,也可能不工作(cout 是 C++ 用于输出的全局对象,和我们自己的对象位于不同的翻译单位): class A {    A() {        cou

Java 类成员的初始化顺序

Java 类成员的初始化顺序 前言:开发中碰到一个Java文件中有很多的成员变量,包括静态和非静态的,还有很多的初始化方法,很好奇这些成员的初始化顺序,在这里作个研究. ? 1 ?无继承情况下的Java初始化顺序: class Sample { Sample(String s) { System.out.println(s); } Sample() { System.out.println("Sample默认构造函数被调用"); } } class Test { static Samp

java中的显示初始化和特定初始化

public class Test{ public static void main(String[] args){ Child child = new Child(); } } class Parent{ public Parent(){ super(); show();//this.show(); 因为是Child类对象调用了super()来构造其父类的部分;所以父类中的this(随着其构造方法入栈的)是指向Child类对象的!所以调用的就是Child类对象的show方法! return ;

java基础-对象的初始化

一 前言 本节内容将会提到方法重载,对象的初始化,对象的构造器,和this关键字的使用,以及会简要的概括一下java中对象回收机制.觉得文章不错的读者可以关注一下作者的博客和公众号(同博客名称) 二 方法重载 2.1 方法重载的定义 方法重载是指同名的方法具有不同的参数列表:不同的参数列表是指参数列表个数不同或者相同的个数的参数,但具有不同的参数类型: 代码示例: /** * @Author lsc * <p> 方法重载</p> */ public class OverLoadZ

java中的静态初始化块

Java 中可以通过初始化块进行数据赋值.如: 在类的声明中,可以包含多个初始化块,当创建类的实例时,就会依次执行这些代码块.如果使用 static 修饰初始化块,就称为静态初始化块. 需要特别注意:静态初始化块只在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量. 我们来看一段代码: 运行结果: 通过输出结果,我们可以看到,程序运行时静态初始化块最先被执行,然后执行普通初始化块,最后才执行构造方法.由于静态初始化块只在类加载时执行一次,所以当再次创建对

[转载]Java中异常的捕获顺序(多个catch)

http://blog.sina.com.cn/s/blog_6b022bc60101cdbv.html [转载]Java中异常的捕获顺序(多个catch) (2012-11-05 09:47:28) 转载▼ 标签: 转载 分类: 转载 原文地址:Java中异常的捕获顺序(多个catch)作者:leesa Java代码 import java.io.IOException; public class ExceptionTryCatchTest { public void doSomething(

Java中数组的初始化方式

Java中数组的初始化方式    初始化方式有两种: 1.静态初始化:初始化时由程序猿显式指定每一个数组元素的初始值,由系统指定数组长度 2.动态初始化:初始化时由程序猿仅仅指定数组长度,由系统为数组元素分配初始值