理解代码执行顺序

这篇文章没有实际作用,不过为了让自己这笨脑袋在忘了的时候看到这段代码能记得是怎样的顺序。

package top.CSY.www;

public class App
{
    private static App a=new App();
    private subClass sub=new subClass();

    static
    {
        System.out.println("3");
    }

    public App()
    {
        System.out.println("4");
    }

    public static void main(String[] args) {
        System.out.println("Hello");
    }
}
//父类
class surperClass
{
    surperClass()
    {
        System.out.println("构造");
    }
}
//子类
class subClass extends surperClass
{
    static
    {
        System.out.println("1");
    }
    subClass()
    {
        System.out.println("2");
    }
}
 //运行结果???

下面看一下运行结果,并分析如何执行。
/*
1 :App类依赖于subClass类,所以得先把subClass类的字节码加载进JVM.
构造 :子类执行构造器时,需先调用父类无参构造.
2
4 :static初始化的代码/代码块,是在类的字节码加载进JVM时一并加载的.
3
Hello :main方法.
*/
值得一提的是:非static字段在初始化时是在构造器中优先执行的;我们可以看一下编译时java底层的代码.

public class App
{
    private static App a = new App();
    private subClass sub;

    public App()
    {
        sub = new subClass();
        System.out.println("4");
    }

    public static void main(String args[])
    {
        System.out.println("Hello");
    }

    static 
    {
        System.out.println("3");
    }
}

由此可清晰的看到代码是如何运行得到结果的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值