java中父类、子类及代码块、成员变量之间的执行顺序

在代码中有类之间有继承关系,父类子类中均有成员变量、普通代码块、静态代码块以及构造方法,那么他们的执行顺序怎么样呢,写了两个类来判断下。

父类:Animal

package com.extends03;

public class Animal {

    public String name = "animal1";
    public int age;
    public static String color = "white";
    //构造方法
    public Animal() {
        name = "animal2";
        System.out.println("create Animal..." + name); //先执行成员变量,再执行普通代码块,最后执行构造方法
        //System.out.println(color);
    }
    //普通代码块
    {
        name = "animal3";
        System.out.println("Animal Class codeBlock");
    }
    //静态代码块
    static {
        color = "red";
        System.out.println("Animal Class static codeBlock  " + "经过静态代码块修改静态值:" + color);
    }
    
    public void eat() {
        System.out.println("Animal eat...");
    }
    
}

 子类:Lion

package com.extends03;

public class Lion extends Animal {
    
    public static String name = "big Lion";
    public Lion() {
        System.out.println("create Lion...");
    }

    public String color = "yellow";
    {
        name = "little lion ";
        color = "white";
        System.out.println(name);
        System.out.println(color);//先执行本类的成员变量,再执行本类普通代码块
        System.out.println("Lion Class codeBlock");
    }
    
    static {
        name = "super Lion";
        System.out.println("Lion Calss static codeBlock  "+ "经过静态代码块修改静态值:" + name);
    }
}

 测试类:

public class TestExtends {
    public static void main(String[] args) {
        Lion l = new Lion();
        System.out.println("验证静态块是否是只被加载一次");
        Animal a = new Animal();
    }
}

 输出结果:

Animal Class static codeBlock  经过静态代码块修改静态值:red  //1、父类静态代码块,同时说明静态变量先初始化,然后再执行静态代码块
Lion Calss static codeBlock  经过静态代码块修改静态值:super Lion //2、子类静态代码块,同时说明静态变量先初始化,然后再执行静态代码块//
Animal Class codeBlock //3、父类普通代码块
create Animal...animal2 //4、父类构造方法
little lion 
white
Lion Class codeBlock  //5、子类代码块
create Lion... //6、子类构造方法
验证静态块是否是只被加载一次  //以下结果说明静态代码只在类第一次加载时执行
Animal Class codeBlock    
create Animal...animal2

猜你喜欢

转载自lilixu.iteye.com/blog/2280719
今日推荐