java 初始化块、静态代码块和静态变量执行顺序

知道java的初始化顺序为先执行父类的静态属性初始化(静态变量,静态初始化块,无先后顺序,按代码顺序执行初始化),然后执行子类的静态属性的初始化

之前做过如下面代码的笔试题:

  public class Test {
	static Test test = new Test();    
	static {
		System.out.println("静态代码块");
	}
	{
		System.out.println("非静态代码块");
	}
	public static void main(String[] args){
		System.out.println("开始执行Main方法");
		Test test = new Test();       
	}
}  

结果为:

非静态代码块
静态代码块
开始执行Main方法
非静态代码块

先初始化static Test test = new Test()语句,因为是static修饰的Test类型的test对象,执行new Test(),调用Test类的构造方法,因为调用构造方法必须先执行一次初始化块语句,所以输出“非静态代码块”,然后执行static代码块,输出“静态代码块”,类初始化结束

执行方法,就先输出“执行main方法”,然后再次执行new Test(),调用Test类的构造方法,再次执行初始化块,输出“非静态代码块”,结束

下面代码是关于静态变量和静态初始化块的初始化顺序的测试:

public class Test2 {
	static  int b = 3;
	static {
		a =1;
		b =1;
		System.out.println("静态初始化块"); 
	}
	static int a = 2 ;
	{
		System.out.println("初始化块");
	}
	public static void main(String[] args) {
		System.out.println(a + "---" + b);
		new Test2();
	}
}

结果:

静态初始化块
2---1
初始化块

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值