今天看到一篇标题:“Java构造时成员初始化的陷阱”的文章:http://coolshell.cn/articles/1106.html

自已写了一个简单的程序测试了一下:

public final class Test
{public Test(){B b = new B();  System.out.println(b.name);}   class A{A(){System.out.println("A()");a();        }void a(){System.out.println("A.a()");}}class B extends A{public String name= "张三";B(){           System.out.println("B()");}void a(){System.out.println("B.a()");name = "李四";}}   public static void main(String[] args){       new Test();     }
}

运行输出的结果:

下面是对上面各个步骤的逐条解释:
进入构造函数。
为成员变量分配内存。
除非你显式地调用super(),否则Java 会在子类的构造函数最前面偷偷地插入super() 。
调用父类构造函数。
调用B.a(),因为被子类override,所以调用的是子类的。
于是,初始化发生在了a()之后。这是因为,Java需要保证父类的初始化早于子类的成员初始化,否则,在子类中使用父类的成员变量就会出现问题。
正式执行子类的构造函数(当然这是一个空函数,虽然我们没有声明)。

我当时看了也很意外,没想到会是这样的执行顺序和结果。

2013-05-11

转载于:https://www.cnblogs.com/personnel/p/4584891.html

Java构造时成员初始化的陷阱相关推荐

  1. Adobe flash cs5 的Java运行时环境初始化错误 完美解决方法

    Adobe flash cs5 的Java运行时环境初始化错误 完美解决方法 下载网络上的Adobe flash cs5 精简版(绿色版),Java运行时环境初始化时出现错误,你可能需要重装Flash ...

  2. flash cs3 pro 写了脚本说java运行环境出错,Flash CS3动作面板打开出错[Java运行时环境初始化时出现错误,你可能需要重......

    为了携带和使用方便,大多数人会选择使用软件的精简版,首先要感谢那些制作精简版软件的作者,因为这类软件一般不用安装,直接就能使用,而且体积一般只有 100MB左右.不过,正因为精简版精简了很多被认为是& ...

  3. Java运行时环境初始化出现错误

    背景 当使用Flash中的动作面板或测试影片时,弹出错误窗口"Java运行时环境初始化时出现错误,你可能需要重装Flash".由于精简版不存在安装问题,因此这类错误一般都是精简过度 ...

  4. 解决:flash cs5运行时出现“java运行时环境初始化时出现错误,你可能需要重装Flash”

    我安装时遇到这个问题,并已成功解决. 解决办法: 确定C:/Documents and Settings/All Users/Application Data/Adobe/CS5/jre下有相关jav ...

  5. Java运行时环境初始化时出现错误,你可能需要重新安装Flash(CS5)

    又是一次网上大搜索.自己总结一下: 下载的版本是Adobe_Flash_CS5 (只有200多MB) 解压后.执行@快速安装.exe,再运行Flash.exe 就出现这个错了. 原因是这个精简版没有带 ...

  6. [转]Java运行时环境初始化时出现错误,你可能需要重新安装Flash(CS5)

    From:http://blog.csdn.net/forscan/archive/2010/07/05/5713178.aspx 又是一次网上大搜索.自己总结一下: 下载的版本是Adobe_Flas ...

  7. JAVA 构造 MAP 并初始化 MAP、定义时就初始化

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 第一种方法:static块初始化 public class Demo{private static ...

  8. java构造方法时对象初始化,实例化,参数赋值

    文章目录 绪论: 绪论: 构造方法时进行对象初始化,以及对象实例化,参数传值是我们这片文章主要要 介绍的东西. 接下来我们就开始讲解一下具体过程: 1.首先我们建一个学生类Student.我们规定这个 ...

  9. JAVA构造MAP并初始化MAP

    第一种方法:static块初始化 public class Demo{ private static final Map<String, String> myMap; static { m ...

最新文章

  1. python100行代码-怎样写贪吃蛇小游戏?用100行python代码轻松解决!
  2. 这份优化清单,你做了哪些?
  3. MPLS服务采购面临哪些挑战?
  4. gridview的sort_GridView排序:SortDirection始终升序
  5. 工业界和学术界的思考
  6. RabbitMQ指南之四:路由(Routing)和直连交换机(Direct Exchange)
  7. Web 前端自学很苦?来,手把手教你,拿下前端!
  8. APP测试之Monkey压力测试(一)
  9. VC2008下安装OpenCV2.3.1
  10. 程序员复试都准备什么_考研复试一般能过吗 主要都考什么
  11. 一文读懂authorized_keys和known_hosts
  12. JVM学习笔记(13) 垃圾回收-相关概念
  13. vue 萤石_Vue接入萤石实时视频
  14. Android 之6.0 双向通话自动录音
  15. 用mysql查找姓王的行为轨迹_mysql查询
  16. 详细解析集成运算放大电路比例运算的工作原理
  17. linux下同时装ananocda2和anaconda3通过修改.bashrc文件进行切换
  18. 阿里云OSS配合PicGo搭建图床
  19. [git可视化软件]gitkraken6.5.1 免费版不能正常使用的解决办法
  20. 三菱fx2n做从站的modbus通讯_三菱PLC控制如何变频器?正解多种方法

热门文章

  1. 《分析服务从入门到精通读书笔记》第四章、创建父子维度(7)
  2. 哈工大鹏程lab武大提出对比学习+超分模型,实现了新的SOTA
  3. OpenVINO 部署 Mask-RCNN 实例分割
  4. “3D几何与视觉技术”全球在线研讨会(9月2日到12月16日)
  5. 3000类别,20万个标注,山师等推出大规模Logo检测数据集:LogoDet-3K
  6. DivideMix: Salesforce提出使用半监督学习大幅改进含噪声标签的学习
  7. 【python教程入门学习】通过运行python脚本来更改Windows背景
  8. 他回国后对学生说,玩会这12个游戏就能掌握python基础,其实不难
  9. 3D游戏建模就是那么简单
  10. 笔记 | 《机器学习》中计算学习理论(下)