首页 > 编程语言 >Java代码块运行顺序细节阐述

Java代码块运行顺序细节阐述

时间:2022-11-09 23:34:04浏览次数:52  
标签:阐述 顺序 Java int 代码 System println public out

以下这个例子非常好的阐述了父子类同时存在时静态代码块/静态变量初始化,普通代码块/普通成员变量初始化,构造器之间的具体运行顺序。

注意,在构造器开头,我们可以看作按顺序隐藏了以下两行关键执行步骤:

super();
普通代码块和普通属性的初始化...

具体例子如下,运行顺序在代码注释中以数字括号给出~

public class CodeBlockDetail {
    public static void main(String[] args) {
        //(1) 进行类的加载
        //1.1 先加载 父类 A02 1.2 再加载 B02
        //(2) 创建对象
        //2.1 从子类的构造器开始
        new B02();//对象
    }
}

class A02 { //父类
    private static int n1 = getVal01();
    static {
        System.out.println("A02的一个静态代码块..");//(2)
    }
    {
        System.out.println("A02的第一个普通代码块..");//(5)
    }
    public int n3 = getVal02();//普通属性的初始化
    public static int getVal01() {
        System.out.println("getVal01");//(1)
        return 10;
    }

    public int getVal02() {
        System.out.println("getVal02");//(6)
        return 10;
    }

    public A02() {//构造器
        //隐藏
        //super()
        //普通代码和普通属性的初始化......
        System.out.println("A02的构造器");//(7)
    }

}

class B02 extends A02 { 

    private static int n3 = getVal03();

    static {
        System.out.println("B02的一个静态代码块..");//(4)
    }
    public int n5 = getVal04();
    {
        System.out.println("B02的第一个普通代码块..");//(9)
    }

    public static int getVal03() {
        System.out.println("getVal03");//(3)
        return 10;
    }

    public int getVal04() {
        System.out.println("getVal04");//(8)
        return 10;
    }
    
    public B02() {//构造器
        //隐藏了
        //super()
        //普通代码块和普通属性的初始化...
        System.out.println("B02的构造器");//(10)
    }
}

标签:阐述,顺序,Java,int,代码,System,println,public,out
From: https://www.cnblogs.com/pluto-/p/16875581.html

相关文章

  • [JavaScript-04]Switch
    1.Switch//Switch语句constcolor='green';switch(color){case'red':console.log('colorisred');break;case'blue':......
  • JAVA-private关键字
    packagecom.itheima;/*学生类*/publicclassstudent01{//成员变量privateStringname;//给name设置privateprivateintage;publicvoid......
  • [JavaScript-02]FOR WHILE循环
    1.语句//For语句for(letindex=0;index<=6;index++){console.log(`ForLoopNumber:${index}`);}//While语句leti=0;while(i<=6){c......
  • java安全之CC1浅学(1)
    前言由于CC链还是比较复杂的,我们可以先看命令执行的部分payload之后再加上反序列化部分组成一个完整的payload调试一项目导入依赖,这里使用3.1版本<!--https://mvnrepo......
  • java内部类 内存泄露
    Java语言中,非静态内部类的主要作用有两个:当内部类只在外部类中使用时,匿名内部类可以让外部不知道它的存在,从而减少了代码的维护工作。当内部类持有外部类时,它就可以直......
  • JavaScript
    1、什么是JavaScript?JavaScript是一门世界上最流行的脚本语言严格检查:'usestrict'<script>'usestrict'//必须放在第一方行leti=1;</script>2、数据......
  • java.sql.SQLException: java.lang.ClassCastException:java.math.BigInteger cannot
    错误原因:由于在IDEA中导入的驱动包的版本和数据库的版本不匹配解决方案:​​数据库官网中下载与数据库配套的Jar包,重新导入就可以了​官网:​​https://dev.mysql.com/downloa......
  • java——流程控制语句——顺序结构语句——单if语句——if...else语句——扩展if……e
                    =============================================================================================================......
  • Java枚举类
    Java枚举类在某些情况下,一个类的对象是有限而且固定的,比如季节类,它只有4个对象;再比如行星类,目前只有8个对象。这种实例有限而且固定的类,在Java里被称为枚举类。1.*手动......
  • 校园社团活动管理系统java
    packageBean;publicclassBean1{ privateStringzhuti; privateStringmudi; privateStringleixing; privateStringshijian; privateStringdidian; pr......