Java初始化顺序

上星期去面试的时候,被问了一条关于java初始化顺序的问题,由于太久没看过core java方面的基础知识,所以不是很记得,只能大概地说了一下。之后,写了一个demo来重新补漏,希望借此能使我以后永远记住。

先定义一个Person类

public class Person {

	public Person(){
		System.out.println("Person non-param constructor!");
	}
	
	public Person(String s){
		System.out.println(s);
	}
}

一、无继承版

public class Base {

	private static Person pserson1 = new Person("person1 initializes!");
	private Person person2 = new Person("person2 initializes!");

	public Base() {
		System.out.println("Base non-param constructor");
	}

	private static Person person3 = new Person("person3 initializes!");
	static {
		System.out.println("static block!");
	}
	
	public static void main(String[] args) {
		Base base = new Base();
	}
}
控制台输出结果


结论

1、静态变量、静态块(按代码中static定义的顺序初始化)

2、实例变量

3、构造器

二、继承版

public class Base {

	private static Person pserson1 = new Person("Base person1 initializes!");
	private Person person2 = new Person("Base person2 initializes!");

	public Base() {
		System.out.println("Base non-param constructor");
	}

	private static Person person3 = new Person("Base person3 initializes!");
	static {
		System.out.println("Base static block!");
	}
}

public class Derived extends Base{

	private static Person person1 = new Person("Derived person1 initializes!");
	private Person person2 = new Person("Derived person2 initializes!");
	static {
		System.out.println("Derived static block!");
	}
    public Derived() {
    	System.out.println("Derived constructor!");
    }
    
    public static void main(String[] args) {
		Derived derived = new Derived();
	}
}


控制台输出结果



结论:

  1. 父类static(按static定义顺序)
  2. 子类static(按static定义顺序)
  3. 父类实例变量
  4. 父类构造器
  5. 子类实例变量
  6. 子类构造器




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值