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

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默认构造函数被调用

得出结论(执行顺序):
a 静态成员变量和static块首先被初始化,其执行顺序和其在类中申明的顺序有关
b 普通成员(实例变量)初始化
c 执行构造函数

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[]) {
		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 默认构造函数被调用

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

d 父类构造方法被调用

e 子类普通成员(实例变量)初始化

f 子类构造函数被调用


  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论 2

打赏作者

feilonglulu

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值