都什么情况下会初始化类
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类不会初始化