您的位置:首页 > 编程语言 > Java开发

Java初始化顺序,静态变量,static块,实例变量,构造器的初始化顺序

2012-07-25 11:21 447 查看
2.继承情况下Java初始化顺序

用代码和输出直接说明:

package com.kael;

/**
*
* @Title:Demo004
* @Description:
* @Copyright:Copyright (c) 2012
* @Date:2012-7-25
* @author feilong.li
*/
public class Initialization {
// 主函数
public static void main(String str[]) {
TA ta = new TA();
System.out.println("-------------------------");
TB tb = new TB();
}
}

class MainTest {
MainTest(String s) {
System.out.println(s);
}
MainTest() {
System.out.println("MainTest默认构造函数被调用");
}
}

class TA {
static MainTest mt = new MainTest("静态成员mt初始化");
MainTest mt1 = new MainTest("mt1成员初始化");
static {
System.out.println("static块执行");
mt = new MainTest("静态块内初始化sam成员变量");
}

TA() {
System.out.println("TA默认构造函数被调用");
}

}

class TB {
static MainTest mainTest1 = new MainTest("静态成员mainTest1初始化");
static {
System.out.println("static 块 1  执行");
}
MainTest mt1 = new MainTest("mt1成员初始化");
static MainTest mainTest2 = new MainTest("静态成员mainTest2初始化");
static {
System.out.println("static 块 2  执行");
}

TB() {
System.out.println("TB默认构造函数被调用");
}

MainTest mt2 = new MainTest("mt2成员初始化");
}

输出结果:

静态成员mt初始化

static块执行

静态块内初始化sam成员变量

mt1成员初始化

TA默认构造函数被调用

-------------------------

静态成员mainTest1初始化

static 块 1  执行

静态成员mainTest2初始化

static 块 2  执行

mt1成员初始化

mt2成员初始化

TB默认构造函数被调用

[align=left]得出结论(执行顺序):[/align]
[align=left]a 静态成员变量和static块首先被初始化,其执行顺序和其在类中申明的顺序有关[/align]
b
普通成员(实例变量)初始化

c
执行构造函数

[align=left]
[/align]
[align=left]2.继承情况下Java初始化顺序[/align]
[align=left]用代码和输出直接说明:
[/align]
package com.kael;

/**
*
* @Title:Demo004
* @Description:
* @Copyright:Copyright (c) 2012
* @Date:2012-7-25
* @author feilong.li
*/
public class Initialization {
// 主函数
public static void main(String str[]) {
TB tb = new TB();
}
}

class Sample {
Sample(String s) {
System.out.println(s);
}

Sample() {
System.out.println("Sample默认构造函数被调用");
}
}

class TA {
static {
System.out.println("父类static 块 1  执行");
}
static Sample staticSam1 = new Sample("父类 静态成员staticSam1初始化");
Sample sam1 = new Sample("父类 sam1成员初始化");
static Sample staticSam2 = new Sample("父类 静态成员staticSam2初始化");
static {
System.out.println("父类 static 块 2  执行");
}

TA() {
System.out.println("父类 Test默认构造函数被调用");
}

Sample sam2 = new Sample("父类 sam2成员初始化");

}

class TB extends TA {
static Sample staticSamSub = new Sample("子类 静态成员staticSamSub初始化");

TB() {
System.out.println("子类 TestSub 默认构造函数被调用");
}

Sample sam1 = new Sample("子类 sam1成员初始化");
static Sample staticSamSub1 = new Sample("子类 静态成员staticSamSub1初始化");

static {
System.out.println("子类 static 块  执行");
}
Sample sam2 = new Sample("子类 sam2成员初始化");
}

输出结果:

父类static 块 1  执行

父类 静态成员staticSam1初始化

父类 静态成员staticSam2初始化

父类 static 块 2  执行

子类 静态成员staticSamSub初始化

子类 静态成员staticSamSub1初始化

子类 static 块  执行

父类 sam1成员初始化

父类 sam2成员初始化

父类 Test默认构造函数被调用

子类 sam1成员初始化

子类 sam2成员初始化

子类 TestSub 默认构造函数被调用

[align=left]得出结论(初始化顺序):[/align]
[align=left]a 父类静态成员变量和static块首先被初始化,其执行顺序和其在类中申明的顺序有关[/align]
b
子类静态成员变量和static块被初始化,其执行顺序和其在类中申明的顺序有关

[align=left]c 父类普通成员(实例变量)初始化[/align]
[align=left][/align]
[align=left]d 父类构造方法被调用[/align]
[align=left][/align]
e
子类普通成员(实例变量)初始化

[align=left][/align]
f
子类构造函数被调用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐