类初始化顺序问题

1、对于静态变量、静态初始化块、变量、初始化块、构造器的初始化顺序

public class Test02 {

    // 静态变量
    public static String staticField = "静态变量";

    // 变量
    public String field = "变量";

    // 静态初始化块
    static {
        System.out.println(staticField);
        System.out.println("静态初始化块");
    }

    {
        System.out.println(field);
        System.out.println("初始化块");
    }

    public Test02() {
        System.out.println("构造器");
    }

    public static void main(String[] args) {
        new Test02();
    }
}
运行代码 结果如下:
      
由此可见:
         (静态变量、静态初始化块)>(变量、初始化块)    >(构造器)

2  、 继承关系下的初始化顺序
class parent {
	public static String p_staticField = "父类 -静态变量";

	public static String p_field = "父类 - 变量";

	static {
		System.out.println(p_staticField);
		System.out.println("父类 -- 静态初始化块");
	}

	{
		System.out.println(p_field);
		System.out.println("父类 -- 初始化块");
	}

	public parent() {
		System.out.println("父类--构造器");
	}
}

public class child extends parent {
	public static String c_staticField = "子类 -- 静态变量";

	public static String c_field = "子类 -- 变量";

	static {
		System.out.println(c_staticField);
		System.out.println("子类 -- 静态初始化块");
	}

	public child() {
		System.out.println("子类 -- 构造器");
	}

	{
		System.out.println(c_field);
		System.out.println("子类 -- 初始化块");
	}

	public static void main(String[] args) {
		new child();
	}

}
运行代码如下:
          
 由此可见:
         (父类静态变量和父类静态初始化块) > (子类静态变量和子类静态初始化块) >(父类变量和初始化块)>(
父类的构造器)>(子类变量和初始化块)>(子类构造器)
       
3、静态变量和静态初始化、变量和初始化变量的初始化顺序
    
public class Test01 {
	
	static {
		System.out.println("静态初始化块");
	}
	
	public static TestA testA = new TestA();
	
	
	public static TestB testB = new TestB();
	
	public static void main(String[] args) {
		new Test01();
	}
	
}

class TestA{
	public TestA() {
		System.out.println("Test -- a");
	}
}

class TestB{
	public TestB() {
		System.out.println("Test -- b");
	}
}
运行结果如下:
                 
改变初始化块和变量的顺序
public class Test01 {
	
	
	public static TestA testA = new TestA();
	
	
	public static TestB testB = new TestB();
	
	static {
		System.out.println("静态初始化");
	}
	
	
	public static void main(String[] args) {
		new Test01();
	}
	
}

class TestA{
	public TestA() {
		System.out.println("Test -- a");
	}
}

class TestB{
	public TestB() {
		System.out.println("Test -- b");
	}
}
运行结果如下:
        
由此可见:静态初始化块和静态变量的先后顺序是:他们在类中出现的先后顺序

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值