Java代码块执行顺序总结

子类、父类变量,代码块,以及构造方法的加载顺序,是我们在程序开发中时不时遇到的一个问题,也是比较容易混淆的。

基础准备:

变量: 成员变量(叫类变量、实例变量)和局部变量
方法: 成员方法和构造方法
代码块:普通代码块、构造代码块、静态代码块、同步代码块

测试的父类:

public class ParentClass {
    public static String name = "爸爸";
    public int age = 40;

    public ParentClass(){
        System.out.println("父类构造函数");
    }

    //非静态代码块
    {
        System.out.println("父类非静态代码块" + "---" + age);
    }

   //静态代码块
    static{
        System.out.println("父类静态代码块" + "---" + name);
    }

}

测试的子类:

public class ChildrenClass extends ParentClass{
    public static String name = "儿子";
    public int age = 15;

    public ChildrenClass(){
        System.out.println("子类构造函数");
    }

    {
        System.out.println("子类非静态代码块" + "---" + age);
    }

    static {
        System.out.println("子类静态代码块" + "---" + name);
    }

}
执行new ChildrenClass()结果:
image.png
结果分析:

父类静态代码块执行前,父类静态变量就已经执行了。
父类非静态代码块执行前,父类非静态变量就已经执行了。
上面结论子类同理。

代码块执行顺序总结:

父类的静态成员变量—->父类静态代码块—->子类静态成员变量—->子类静态代码块—>父类非静态变量—->父类非静态代码块—->父类构造方法—->子类非静态变量—->子类非静态代码块—->子类构造方法。

另外关于代码块的总结:
  1. 在类第一次调用时,静态代码块只执行这一次。
  2. 静态代码块和静态方法只能调用静态变量,因为它们执行时非静态变量还没初始化;
  3. 非静态代码块和非静态方法可以调用任何(静态+非静态)变量。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 2,812评论 0 11
  • 第四章 面向对象 面向对象思想 面向对象思想的引入前面我们讲过数组,当有多个数组都需要遍历时,我们可以将遍历的代码...
    chongsheng阅读 799评论 0 0
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 34,697评论 18 399
  • 、6一、基本知识 1.JDK和JRE的区别 答:JDK是java语言开发工具包,包含JRE和开发工具(javac....
    梦游的沙师弟阅读 1,371评论 0 4
  • 2015年的12月27日,是我人生值得喝彩的一天。因为在那一天我征服了自己,完成了人生的第一次全程马拉松。 开跑之...
    林春生阅读 727评论 0 1

友情链接更多精彩内容