Java类的各种成员初始化顺序

参考:https://blog.csdn.net/qq_27093465/article/details/70292221

class B extends A ,然后A类也就是父类里面有静态代码块,普通代码块,静态方法,静态成员变量,普通成员变量,普通方法。
子类也是这样,然后继承之后,关于程序打印输出的结果。
涉及到Java类的各种成员的初始化顺序。
经测试,得到如下结论:
执行顺序:按照下面的1-》2-》3-》4-》5-》6步骤
1.父类【静态成员】和【静态代码块】,按在代码中出现的顺序依次执行。
2.子类【静态成员】和【静态代码块】,按在代码中出现的顺序依次执行。
3.父类的【普通成员变量被普通成员方法赋值】和【普通代码块】,按在代码中出现的顺序依次执行。
4.执行父类的构造方法。
5.子类的【普通成员变量被普通成员方法赋值】和【普通代码块】,按在代码中出现的顺序依次执行。
6.执行子类的构造方法。
 

下面是测试的代码:

package math;

public class Parent {
    
    static{
        System.out.println("Parent--static--静态代码块");
    }
    
    {
        System.out.println("Parent--普通代码块");
    }
    
    public Parent(){
        System.out.println("Parent--构造器");
    }

    public static int way(){
        System.out.println("Parent--static-方法");
        return 1;
    }
    

    public  int  way1(){
        System.out.println("Parent---方法");
        return 1;
    }
    
    private static int i=way();
    private  int i1=way1();
}
------------------------------------------

public class Son extends Parent{

    static{
        System.out.println("Son--static--静态代码块");
    }
    
    {
        System.out.println("Son--普通代码块");
    }
    
    public Son(){
        System.out.println("Son--构造器");
    }

    public static int way(){
        System.out.println("Son--static-方法");
        return 1;
    }
    
    public  int  way1(){
        System.out.println("Son---方法");
        return 1;
    }
    private static int i=way();
    private  int i1=way1();
}

---------------------------

测试:

    public static void main(String[] args) {
        new Son();

    }

结果:

Parent--static--静态代码块
Parent--static-方法
Son--static--静态代码块
Son--static-方法
Parent--普通代码块
Son---方法(父类的方法被子类覆盖了)
Parent--构造器
Son--普通代码块
Son---方法
Son--构造器

猜你喜欢

转载自blog.csdn.net/wojiao228925661/article/details/81113972
今日推荐