类初始化问题

public class Main extends A{
    
    private String s = "hello";
    public Main(){
        hello();
    }
    public void hello(){
        System.out.println("s "+s);
    }
    public static void main(String[] args) {
        new Main();
    
    }
}

class A{
    private String s2 = "world";
    public A(){
        hello();
        System.out.println(this);
    }
    public void hello(){
        System.out.println("s2 "+s2);
    }
}
结果
s null
com.briup.Main@15db9742
s hello

解析:

初始化过程是这样的: 
1.首先,初始化父类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化; 
2.然后,初始化子类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化; 
3.其次,初始化父类的普通成员变量和代码块,在执行父类的构造方法;
4.最后,初始化子类的普通成员变量和代码块,在执行子类的构造方法;

猜你喜欢

转载自www.cnblogs.com/wskb/p/10958923.html