java类成员初始化顺序

public class InitialOderExtends extends Parent {
 
	// 静态变量
	 public static String s_StaticField = "subclass--static variable";
	 // 变量
	 public String s_Field = "subclass--variable";
	 // 静态初始化块
	 static {
		 System.out.println(s_StaticField);
		 System.out.println("subclass--static block init");
	 }
	 // 初始化块
	 {
		 System.out.println(s_Field);
		 System.out.println("subclass--block init");
	 }
	
	// 构造器
	public InitialOderExtends() {
		System.out.println("subclass--constructor");
		System.out.println("i=" + i + ",j=" + j);	
	}
	
	public static void main(String[] args) {
		
		System.out.println("subclass main");
		new InitialOderExtends();
	}

}

class Parent {
	 // 静态变量
	 public static String p_StaticField = "parentclass--static variable";
	 // 变量
	 public String p_Field = "parentclass--variable";
	 protected int i = 1;
	 protected int j = 1;
	 // 静态初始化块
	 static {
		 System.out.println(p_StaticField);
		 System.out.println("parentclass--static block init");
	 }
	 // 初始化块
	 {
		 System.out.println(p_Field);
		 System.out.println("parentclass--block init");
	 }
	 // 构造器
	 public Parent() {
		 System.out.println("parentclass--constructor");
		 System.out.println("i=" + i + ", j=" + j);
		 j = 2;
	 }
}

 

     * java类成员的初始化顺序:

       父类(静态变量、静态初始化块) > 子类 (静态变量、静态初始化块) > 父类 (成员变量、初始化块)

       > 父类构造器 > 子类(成员变量、初始化块) > 子类构造器

 

     * 需要调用父类构造器进行初始化时,子类构造器的第一行代码一定是调用父类构造器。

 

输出为:

parentclass--static variable
parentclass--static block init
subclass--static variable
subclass--static block init
subclass main
parentclass--variable
parentclass--block init
parentclass--constructor
i=1, j=1
subclass--variable
subclass--block init
subclass--constructor
i=1,j=2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值