黑马程序员技术交流社区

标题: Java子类构造的执行顺序 [打印本页]

作者: 百里青山    时间: 2016-4-9 12:26
标题: Java子类构造的执行顺序
Java子类构造的完整执行顺序
package test;

public class Test {
    public static void main(String[] args) {
        new Son();
    }
     
    public static void print(String msg) {
        System.out.println(msg);
    }
     
    public static int getInt(String name) {
        print("static member " + name);
        return 0;
    }
     
    public static String getString(String name) {
        print("nonstatic member " + name);
        return "";
    }

    static class Parent {
        Parent() {
            print("constructor parent");
        }
         
        static {
            print("static block parent");
        }
         
        {
            print("nonstatic block parent");
        }
         
        String str = getString("parent");
         
        static int i = getInt("parent");
    }

    static class Son extends Parent {   
        Son() {
            print("constructor son");
        }
         
        static {
            print("static block son");
        }
         
        {
            print("nonstatic block son");
        }
         
        String str = getString("son");
         
        static int i = getInt("son");
    }
}





最后输出结果为:


static block parent
static member parent
static block son
static member son
nonstatic block parent
nonstatic member parent
constructor parent
nonstatic block son
nonstatic member son
constructor son




这个说明了Java类的执行顺序为:
父类的静态块--->父类的静态成员--->子类的静态块--->子类的静态成员--->父类的非静态块--->父类的非静态成员--->
父类的构造函数--->子类的非静态块--->子类的非静态成员--->子类的构造函数



作者: 747844695    时间: 2016-4-9 12:38
学到了...谢谢




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2