什么情况下会初始化类

都什么情况下会初始化类

public class A {
	{
		System.out.println("block");
	}
	static{
		System.out.println("static");
	}
	public void run(){
		System.out.println("A run");
	}
	
	public void service(){
		System.out.println("A service");
	}
public class B extends A {

	@Override
	public void service() {
		super.service();
//		System.out.println("B service");
	}

}
	public static void main(String[] args) {
		
		A b =new B();
		b.service();
		B b2 =new B();
		b2.service();
		B b1 =new B();
		b1.service();
	}

答案:

static
block
A service
block
A service
block
A service

1 只要是调用了父类的方法,父类一定会初始化,并且静态代码块只执行了一次

public class B extends A {

	@Override
	public void service() {	
	  System.out.println("B service");
	}
}
	public static void main(String[] args) {
		
		A b =new B();
		b.service();
		B b2 =new B();
		b2.service();
		B b1 =new B();
		b1.service();
	}

答案:

static
block
B service
block
B service
block
B service

因为子类是new 的所以,父类A 类还是会初始化

但是子类service 把父类的覆盖了,就不会执行父类的方法了。

public class A {
	
	public static final int i=1;
	public static void main(String[] args) {
		System.out.println(A.i);
	}

A类不会初始化

猜你喜欢

转载自blog.csdn.net/qq_20610631/article/details/82504046