java中静态代码块 构造代码块 构造方法的执行顺序及注意问题

闲暇之余,总结并撸码测试了一下静态代码块、构造代码块、构造方法的执行顺序及需要注意的问题

当然,首先大家得知道静态代码块是跟着类的加载而加载的,而构造代码块和构造方法是随着对象的加载而加载的,相比这个问题大家都已经很熟悉了。

以下是测试用的一个小Demo,便于更清楚的说明事实:

 

package com.test;

public class Test {
	
	private int number=0;
	
	//静态代码块
	static{
		System.out.println("静态代码块执行!");
	}
	
	//构造代码块
	{
		System.out.println("构造代码块执行!");
		number=1;
	}
	
	//构造方法
	public Test(){
		System.out.println("构造方法执行!");
		System.out.println(number);
	}
	
	
	public static void main(String[] args) {
		new Test();
	}
}

最终输出为:

 

 

静态代码块执行!
构造代码块执行!
构造方法执行!
1

以上Demo可以很清楚看出这三个代码块的执行顺序,可以这样理解,静态代码块在类加载的时候就执行了,不论你是否new了对象,而构造代码块和构造方法是必须在创建该类的对象时才会执行,且执行顺序是   构造代码块->构造方法  ,这样子,你就可以在构造代码块中做一些需要再构造方法之前做的事儿了。

 

若类存在继承问题,而恰好两个类中都有这三种代码块,那么执行顺序将会是先执行父类的静态代码块,再执行子类的静态代码块,然后执行父类的构造代码块,执行父类的构造方法,再执行子类的构造代码块,执行子类的构造方法。

 

不知道我表述的够明白不,把大家绕晕了没有。这里总结一下吧!

总结:静态的是与类有关,会先加载,而构造代码块是会在对象初始化时执行,然后再执行构造方法,除非构造方法中含有this()或者super(),若有,则构造代码块将会在this()或者super()之后执行,然后再执行构造方法的方法体;

 

以上都是个人总结,若有错误之处,欢迎各位大神提出指正!

推荐大家一个Java的学习网站:Java知识学习网,Java资料下载,Java学习路线图,网址:https://www.java1010.com

 

你可能感兴趣的:(java)