java类的初始化顺序

java类的初始化顺序

有关java类的初始化顺序:
最重要的有两点 :
1. 父类初始化顺序优先于子类
2. . 静态的初始化优先于非静态
但是记忆中具体的顺序总是和实际的初始化顺序有些许的出入,为了加深记忆和理解,
自己专门写了一个类来测试类的初始化顺序

本篇博客相关的代码已经上传到了github中:

github项目链接:
本篇博客涉及代码的github链接
测试代码如下:

	/**
	 * @author xmr
	 * @date 2019/2/28 10:48
	 * @description
	 */
	public class ClassLoaderTest {
	    public static void main(String[] args) {
	        ClassLoaderSon classLoaderSon = new ClassLoaderSon();
	    }
	    static TestDemo testDemo = new TestDemo();
	    TestDemo testDemo2 = new TestDemo(2);
	    static {
	        System.out.println("初始化父类静态代码块");
	    }
	    ClassLoaderTest(){
	        System.out.println("初始化父类构造方法");
	    }
	    {
	        System.out.println("初始化父类构造代码块");
	    }
	}
	class ClassLoaderSon extends ClassLoaderTest
	{
	    static TestDemoSon testDemoSon = new TestDemoSon();
	    TestDemoSon testDemoSon2 = new TestDemoSon(2);
	    static {
	        System.out.println("初始化子类静态代码块");
	    }
	    ClassLoaderSon()
	    {
	        System.out.println("初始化子类构造方法");
	    }
	    {
	        System.out.println("初始化子类构造代码块");
	    }
	
	}
	class TestDemo {
	    TestDemo() {
	        System.out.println("初始化父类静态变量");
	    }
	    TestDemo(int x)
	    {
	        System.out.println("初始化父类成员变量");
	    }
	}
	class TestDemoSon {
	    TestDemoSon()
	    {
	        System.out.println("初始化子类静态变量");
	    }
	    TestDemoSon(int x)
	    {
	        System.out.println("初始化子类成员变量");
	    }
	}

程序执行结果如下:
TIM图片20190228110909.png
由此可以得到,java的类初始化顺序是 :

		1. 父类的静态变量,父类的静态代码块(谁在上面就先初始化谁)
	    2. 子类的静态变量,子类的静态代码块(谁在上面就先初始化谁)
	    3. 父类成员变量
	    4. 父类的构造代码块
	    5. 父类的构造函数
	    6. 子类成员变量
	    7. 子类的构造代码块
	    8. 子类的构造函数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值