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

打印 上一主题 下一主题

主题 884|帖子 884|积分 2652

以下这个例子非常好的阐述了父子类同时存在时静态代码块/静态变量初始化,普通代码块/普通成员变量初始化,构造器之间的具体运行顺序。
注意,在构造器开头,我们可以看作按顺序隐藏了以下两行关键执行步骤:
  1. super();
  2. 普通代码块和普通属性的初始化...
复制代码
具体例子如下,运行顺序在代码注释中以数字括号给出~
  1. public class CodeBlockDetail {
  2.     public static void main(String[] args) {
  3.         //(1) 进行类的加载
  4.         //1.1 先加载 父类 A02 1.2 再加载 B02
  5.         //(2) 创建对象
  6.         //2.1 从子类的构造器开始
  7.         new B02();//对象
  8.     }
  9. }
  10. class A02 { //父类
  11.     private static int n1 = getVal01();
  12.     static {
  13.         System.out.println("A02的一个静态代码块..");//(2)
  14.     }
  15.     {
  16.         System.out.println("A02的第一个普通代码块..");//(5)
  17.     }
  18.     public int n3 = getVal02();//普通属性的初始化
  19.     public static int getVal01() {
  20.         System.out.println("getVal01");//(1)
  21.         return 10;
  22.     }
  23.     public int getVal02() {
  24.         System.out.println("getVal02");//(6)
  25.         return 10;
  26.     }
  27.     public A02() {//构造器
  28.         //隐藏
  29.         //super()
  30.         //普通代码和普通属性的初始化......
  31.         System.out.println("A02的构造器");//(7)
  32.     }
  33. }
  34. class B02 extends A02 {
  35.     private static int n3 = getVal03();
  36.     static {
  37.         System.out.println("B02的一个静态代码块..");//(4)
  38.     }
  39.     public int n5 = getVal04();
  40.     {
  41.         System.out.println("B02的第一个普通代码块..");//(9)
  42.     }
  43.     public static int getVal03() {
  44.         System.out.println("getVal03");//(3)
  45.         return 10;
  46.     }
  47.     public int getVal04() {
  48.         System.out.println("getVal04");//(8)
  49.         return 10;
  50.     }
  51.    
  52.     public B02() {//构造器
  53.         //隐藏了
  54.         //super()
  55.         //普通代码块和普通属性的初始化...
  56.         System.out.println("B02的构造器");//(10)
  57.     }
  58. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

怀念夏天

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表