成员变量、静态代码块、非静态代码块、构造器的初始化顺序

首先说结论吧

静态成员变量->父类静态代码块->子类静态成员变量->子类静态代码块->父类成员变量->父类非静态代码快->父类构造器->子类成员变量->子类非静态代码块->子类构造器

具体例子可以看如下示例

复制代码
public class TestFuZi {
    public static void main(String[] args) {
        Zi z=new Zi();
    }
}
class Fu{
    private static int i=getNum("(1)i");
    private int j=getNum("(2)j");
    static {
        print("(3)父类静态代码块");
    }
    {
        print("父类非静态代码块,又称为构造代码块");
    }
    Fu(){
        print("(5)父类构造代码块");
    }
    public static void print(String str){
        System.out.println(str+"->"+i);
    }
    public static int getNum(String str){
        print(str);
        return ++i;
    }
}

class Zi extends Fu{
    private static int k=getNum("(6)k");
    private int h=getNum("(7)h");
    static {
        print("(8)子类静态代码块");
    }
    {
        print("(9)子类非静态代码块,又称为构造代码块");
    }
    Zi(){
        print("(10)子类构造器");
    }
    public static int getNum(String str){
        print(str);
        return ++k;
    }
}
复制代码

该程序的输出结果是:

 

posted @   我吃大西瓜  阅读(36)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示