A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 百里青山 高级黑马   /  2016-4-9 12:26  /  497 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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类的执行顺序为:
父类的静态块--->父类的静态成员--->子类的静态块--->子类的静态成员--->父类的非静态块--->父类的非静态成员--->
父类的构造函数--->子类的非静态块--->子类的非静态成员--->子类的构造函数


1 个回复

倒序浏览
学到了...谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马