Java小强个人技术博客站点    手机版
当前位置: 首页 >> Java >> 静态代码块、构造代码块、构造方法的执行顺序

静态代码块、构造代码块、构造方法的执行顺序

6000 Java | 2022-2-14

执行顺序是:

先执行“静态代码块”,再执行“构造代码块”,最后执行“构造方法”。

静态代码块是类级别的,而构造代码块和构造方法是实例级别的,因而静态代码块先执行;又因构造代码块是独立的,必须依附载体才能运行,因而构造代码块需放到构造方法前。


静态代码块:用staitc声明,jvm加载类时执行,仅执行一次

构造代码块:类中直接用{}定义,每一次创建对象时执行。

执行顺序优先级:静态块,main(),构造块,构造方法。


演示

public class A {

	public A() {
		System.out.println("构造方法A");
	}

	{
		System.out.println("构造代码块A");
	}

	static {
		System.out.println("静态代码块A");
	}

}

调用

public class T {
	public static void main(String[] args) {
		new A();
	}
}

输出

静态代码块A
构造代码块A
构造方法A


多个实例演示

public class T {
	public static void main(String[] args) {
		new A();
		new A();
		new A();
	}
}

输出

静态代码块A
构造代码块A
构造方法A
构造代码块A
构造方法A
构造代码块A
构造方法A


继承体系中的顺序又是什么样的?

代码

public class B extends A {

	public B() {
		System.out.println("构造方法B");
	}

	{
		System.out.println("构造代码块B");
	}

	static {
		System.out.println("静态代码块B");
	}
	
}

调用

public class T {
	public static void main(String[] args) {
		new B();
	}
}

输出

静态代码块A
静态代码块B
构造代码块A
构造方法A
构造代码块B
构造方法B


总结

1、在创建一个对象的过程中,三者的执行顺序是:静态代码块 --> 构造代码块 --> 构造方法;

1.静态代码块:是在类的加载过程的第三步初始化的时候进行的,主要目的是给类变量赋予初始值。

2.构造代码块:是独立的,必须依附载体才能运行,Java会把构造代码块放到每种构造方法的前面,用于实例化一些共有的实例变量,减少代码量。

3.构造方法:用于实例化变量。

1是类级别的,2、3是实例级别的,自然1要优先23。

在就明白一点:对子类得主动使用会导致对其父类得主动使用,所以尽管实例化的是子类,但也会导致父类的初始化和实例化,且优于子类执行。

2、每创建一个对象,构造代码块和构造方法就会执行一次;而不管创建多少个对象,静态代码块仅仅只在创建第一个对象时执行一次;

3、创建子类对象时,子类的静态代码块在父类的静态代码块后面执行,但优先于父类的构造代码块和构造方法;

4、创建子类对象时,子类的构造代码块在父类的构造方法后执行。


PS:如果你看完以后觉得一脸懵逼,亲,正常的,因为我写完以后还是一脸懵逼。写下来只是为了这一会是清醒的而已。


推荐您阅读更多有关于“ 静态代码块 构造代码块 构造方法 顺序 ”的文章

上一篇:Java自定义类的加载器 下一篇:Java之SimpleDateFormat

猜你喜欢

发表评论: