验证证的方法是写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. 模拟title提示!

    转载http://wouit.com/post/2013-08-15/40052169981html <a href="#" tishi="常见的网页新闻循环跳动显 ...

  2. vue过渡 & 动画---进入/离开 & 列表过渡

    (1)概述 Vue 在插入.更新或者移除 DOM 时,提供多种不同方式的应用过渡效果.包括以下工具: 在 CSS 过渡和动画中自动应用 class 可以配合使用第三方 CSS 动画库,如 Animat ...

  3. iphone6,iphone6 plus适配,旧项目出现黑线问题

    问题:可能开始适配iPhone6和iPhone6 plus的朋友很快就发现,模块器头部和底部会出线一条黑线.但是在其他模拟器完全没有问题.程序也能正常跑.如下图 很清楚的看到头部有一条黑线. 解决办法 ...

  4. 前k大金币(动态规划,递推)

    /* ///题解写的很认真,如果您觉得还行的话可以顶一下或者评论一下吗? 思路: 这题复杂在要取前k大的结果,如果只是取最大情况下的金币和,直接 动态规划递归就可以,可是前k大并不能找出什么公式,所以 ...

  5. poj2352 Stars【树状数组】

    Astronomers often examine star maps where stars are represented by points on a plane and each star h ...

  6. [Algorithm] 5. Kth Largest Element

    Description Find K-th largest element in an array. Example In array [9,3,2,4,8], the 3rd largest ele ...

  7. 深入理解PHP之strpos

    概述 在php中经常用 strpos 判断字符串是否在另一个字符串中存在, 本文介绍 strpos 函数及其实现. strpos应用 <?php /* strpos示例 */ // test e ...

  8. jdk版本特性

    https://segmentfault.com/a/1190000004419611 java5 泛型 枚举 装箱拆箱 变长参数 注解 foreach循环 静态导入 格式化 线程框架/数据结构 Ar ...

  9. Just a Hook (HDU 1698) 懒惰标记

    Just a Hook (HDU 1698) 题链 每一次都将一个区间整体进行修改,需要用到懒惰标记,懒惰标记的核心在于在查询前才更新,比如将当前点rt标记为col[rt],那么此点的左孩子和右孩子标 ...

  10. AD7606

    在只给芯片的RANGE和PAR_SER引脚上电(不给芯片加电)的时候,芯片严重发热. 改回给芯片加电,发热消失,芯片正常工作,芯片没有损坏. 版权声明:本文为博主原创文章,未经博主允许不得转载.