验证证的方法是写code。例如以下:
public class test {

    static class A {
public static String name = "hello"; static {
System.out.println("A static block1"); //1
} {
System.out.println("A block3"); //3
} public A() {
System.out.println("A constructor4"); //4
}
} static class B extends A {
public static String childName = "hello"; static {
System.out.println("B static block2"); //2
} {
System.out.println("B block5"); //5
} public B() {
System.out.println("B constructor6"); //6
}
} public static void main(String[] args) {
new B();
} }

以上运行结果为:

A static block1
B static block2
A block3
A constructor4
B block5
B constructor6
  • 分析:当运行new B()时。它首先去看父类里面有没有静态代码块,假设有,它先去运行父类里面静态代码块里面的内容。当父类的静态代码块里面的内容运行完成之后。接着去运行子类(自己这个类)里面的静态代码块,当子类的静态代码块运行完成之后,它接着又去看父类有没有非静态代码块,假设有就运行父类的非静态代码块,父类的非静态代码块运行完成。接着运行父类的构造方法;父类的构造方法运行完成之后,它接着去看子类有没有非静态代码块,假设有就运行子类的非静态代码块。

    子类的非静态代码块运行完成再去运行子类的构造方法,这个就是一个对象的初始化顺序。

  • 总结:对象的初始化顺序:首先运行父类静态的内容,父类静态的内容运行完成后,接着去运行子类的静态的内容,当子类的静态内容运行完成之后,再去看父类有没有非静态代码块。假设有就运行父类的非静态代码块,父类的非静态代码块运行完成,接着运行父类的构造方法。父类的构造方法运行完成之后,它接着去看子类有没有非静态代码块,假设有就运行子类的非静态代码块。子类的非静态代码块运行完成再去运行子类的构造方法。总之中的一个句话,静态代码块内容先运行,接着运行父类非静态代码块和构造方法,然后运行子类非静态代码块和构造方法。
  • 注意:子类的构造方法,无论这个构造方法带不带參数,默认的它都会先去寻找父类的不带參数的构造方法。假设父类没有不带參数的构造方法,那么子类必须用supper关键子来调用父类带參数的构造方法,否则编译不能通过。

Java中四大代码块的运行顺序(附code)的更多相关文章

  1. Java中四大代码块的执行顺序(附code)

    验证证的方法是写code,如下: public class test { static class A { public static String name = "hello"; ...

  2. 【Java基础】2、Java中普通代码块,构造代码块,静态代码块区别及代码示例

    Java中普通代码块,构造代码块,静态代码块区别及代码示例.Java中普通代码块,构造代码块,静态代码块区别及代码示例 执行顺序:静态代码块>静态方法(main方法)>构造代码块>构 ...

  3. Java 中静态代码块初始化问题测试

    Java 中静态代码块初始化问题测试 原创 情况一:变量是 static final 修饰的"编译期常量",如 public static final String a = &qu ...

  4. Java中普通代码块,构造代码块,静态代码块执行顺序

    //执行顺序:(优先级从高到低.)静态代码块>mian方法>构造代码块>构造方法. 其中静态代码块只执行一次.构造代码块在每次创建对象是都会执行. 1 普通代码块 1 //普通代码块 ...

  5. java中静态代码块初始化顺序

    (一)java 静态代码块 静态方法区别    一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下, ...

  6. Java中普通代码块,构造代码块,静态代码块区别及代码示例

    //执行顺序:(优先级从高到低.)静态代码块>mian方法>构造代码块>构造方法. 其中静态代码块只执行一次.构造代码块在每次创建对象是都会执行. 1 普通代码块 1 //普通代码块 ...

  7. Java中普通代码块,构造代码块,静态代码块的代码演示样例及区分

    //运行顺序:(优先级从高到低.)静态代码块>mian方法>构造代码块>构造方法. 当中静态代码块仅仅运行一次.构造代码块在每次创建对象是都会运行. 1 普通代码块 <span ...

  8. Java中静态代码块、构造代码块、构造函数、普通代码块

    在Java中,静态代码块.构造代码块.构造函数.普通代码块的执行顺序是一个笔试的考点,通过这篇文章希望大家能彻底了解它们之间的执行顺序. 1.静态代码块 ①.格式 在java类中(方法中不能存在静态代 ...

  9. 【Java学习笔记之十七】Java中普通代码块,构造代码块,静态代码块区别及代码示例分析

    //执行顺序:(优先级从高到低.)静态代码块>mian方法>构造代码块>构造方法. 其中静态代码块只执行一次.构造代码块在每次创建对象是都会执行. 1 普通代码块 //普通代码块:在 ...

随机推荐

  1. Js变量类型

    值类型和引用类型 值类型(基本类型):5种,Number String Boolean null undefined var a=10; var b=a; a=2; console.log(b); a ...

  2. Android基础TOP6_1:FrameLyayout和ImageView制作层叠图片

    Activity: <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns ...

  3. Windows IIS 集成PHP时修改PHP.ini 配置后不生效问题

    iis下修改c://windows/php.ini 重启iis的网站不生效.需要重启应用程序池即可生效.

  4. mongo 3.4分片集群系列之八:分片管理

    这个系列大致想跟大家分享以下篇章: 1.mongo 3.4分片集群系列之一:浅谈分片集群 2.mongo 3.4分片集群系列之二:搭建分片集群--哈希分片 3.mongo 3.4分片集群系列之三:搭建 ...

  5. iOS显示一张图片 Objective-C

    图片文件放在项目目录下 #import "ViewController.h" @interface ViewController () @end @implementation V ...

  6. discuz x3论坛搬家换虚拟主机完美使用教程 亲测可行 附操作步骤

    第一步:备份网站数据进入后台—站长—数据库—备份,数据备份类型选择“Discuz!和 UCenter数据”,备份成功以后,数据自动保存在data文件夹下. 第二步:网站文件下载 把整个网站文件打包(虚 ...

  7. Mybatis学习总结二

    Mapper动态代理开发方式 实现原理: Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象. Mapper接口开发需 ...

  8. 使用JS获取request参数

    1.document.write('<%=request.getAttribute("param")%>'); 2.window.navigator.userAgent ...

  9. 用Docker构建Nginx镜像

    1构建Nginx镜像 1建立工作目录 [root@localhost ]# mkdir 1nginx [root@localhost 1nginx]# cd 1nginx/ [root@localho ...

  10. 关于Extjs的窗口拖拽,改变大小,背景淡化问题

    大部分Extjs的Windows问题:在Extjs4代码中,只要加几句话: frame:true, //这个窗口的边边是圆的 border : false , //窗口没有边框 draggable: ...