Java代码执行顺序-顺口溜

代码执行顺序虽然是很基础的东西,但是还是有很多人搞不清楚其中的细节。 关于java代码的执行顺序,我编了一段顺口溜,相信你再也不会被这个问题难住了。

这段顺口溜是这样的:

这就是代码的执行顺序,其实很简单,下面详细解释。

Java代码执行顺序

类加载阶段

相信你对类加载阶段已经足够了解了,如果还不够了解,建议你阅读我的 你不知道的虚拟机类加载机制。 然后来理解这个顺口溜的前三句。

也就是在加载子类的时候必须先加载父类。

静态成员和静态代码块是类的元数据信息,在类初始化的时候执行。

静态成员的初始化后,静态代码块执行。

程序运行阶段

现在来理解这个顺口溜的后三句。 这是在类加载阶段完成,程序运行的阶段执行的。

这句话是说new一个对象的时候一定要是parent先构造,这里你或许会有点疑问:“平时继承类的时候也没调用super函数呀?”,这是因为如果parent有默认的构造函数,那子类也不需要显示调用。否则是必须要这么做的。

对象初始化的过程先是执行对象成员的初始化、然后是公共代码块的执行。

公共代码块是所有重载的构造函数的公共部分,是指类似这样的一段代码:

{
    System.out.println("构造代码块 " );
}
复制代码

对象的成员和代码块都执行完之后,才开始构造函数。如果有parent,那按照parent成员、parent代码块、parent构造函数之后,再child依次执行的顺序来执行。

具体例子

建议运行下面的例子,来理解这段顺口溜。

public class Parent {
    static int staticV;
    static {
        System.out.println("staticV = " + staticV);
        System.out.println("parent 静态代码块  " );

    }
    int v;
    {
        System.out.println("v = " + v);
    }
    {
        System.out.println(" parent 构造代码块 " );
    }

    public Parent(int v) {
        this.v = v;
        System.out.println(" parent 构造函数 "  +v);
    }
}
复制代码
public class Child extends Parent{


    static int staticV;
    static {
        System.out.println("staticV = " + staticV);
        System.out.println("child 静态代码块  " );

    }
    int v;
    {
        System.out.println("v = " + v);
    }
    {
        System.out.println(" child 构造代码块 " );
    }

    public Child() {
        super(1);
        System.out.println(" child 构造函数 " );
    }


    public static void main(String[] args) {
        Child child = new Child();
    }

}
复制代码

运行将返回:

staticV = 0
parent 静态代码块  
staticV = 0
child 静态代码块  
v = 0
 parent 构造代码块 
 parent 构造函数 1
v = 0
 child 构造代码块 
 child 构造函数 
复制代码

注意事项

就像上面提到的那样,parent如果没有默认的无参构造函数,那就必须在子类里面显示的调用父类的构造函数,否则会导致程序编译不通过。


Java代码执行顺序-顺口溜




作者:小圆规
链接:https://juejin.cn/post/7076302581194194981

展开阅读全文

页面更新:2024-04-23

标签:顺口溜   顺序   代码   子类   初始化   静态   函数   加载   对象   成员

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top