java中静态代码块,静态变量,成员变量,构造代码块,构造方法执行顺序?

public class ClassA {
	public String str;
	{
		System.out.println("父类的构造代码块1");
	}
	
	{
		System.out.println("父类的构造代码块2");
	}
	public ClassA(){
		System.out.println("父类的无参构造1");	
		}
		
	ClassB b=new ClassB();
	
	static {
		System.out.println("父类的静态代码块1");
	}
	
	public ClassA(String str) {
		System.out.println("父类的有参构造"+str);
	}
	public static void main(String[] args) {
		ClassA classA=new ClassA();
		//输出父类的静态代码块1 父类的构造代码块1 父类的构造代码块2  classB  父类的无参构造1
	}
}

public class ClassB {
public ClassB() {
	System.out.println("classB");
}
}

总结:

情况一:非继承状态下

  1. 先加载子类的(静态代码块,静态变量),接下来再执行main函数
  2. 创建调用构造方法之前会先调用(构造代码块,成员变量)(括号里面的代码的按照先后顺序执行)
  3. 总体就是(静态代码块 静态变量)–(构造代码块 成员变量)–(构造方法

情况二:继承状态下

  1. 先加载父类的静态代码块或者静态变量,在加载子类的静态代码块和静态变量
  2. 接着在执行main函数,创建对象的时候,先调用(成员变量,构造代码块),再调用构造方法。但是在main函数中的执行,在每次调用某个类的构造方法以前,一定会先执行(成员变量,构造代码块),括号里面的按照代码出现的先后顺序执行
  3. (静态代码块,静态变量)–(构造代码块 成员变量 )–构造方法

注意:静态代码块只加载一次。

猜你喜欢

转载自blog.csdn.net/weixin_44637905/article/details/86776607