Java 构造时成员初始化的陷阱
来源:互联网 发布:切尔西鞋 知乎 编辑:程序博客网 时间:2024/06/08 14:29
1、首先列出代码
Base.java
public class Base{ Base() { preProcess(); } void preProcess() {}}
Derived.java
public class Derived extends Base{ public String whenAmISet = "set when declared"; @Override void preProcess() { whenAmISet = "set in preProcess()"; }}
Main.java
public class Main{ public static void main(String[] args) { Derived d = new Derived(); System.out.println( d.whenAmISet ); }}
2、运行结果
3、原因
可参考http://blog.csdn.net/jltxgcy/article/details/17398751。
1、调用父类全局变量初始化,这里没有全局变量也不用初始化。
2、调用父类构造函数,里面调用了子类的成员函数preProcess,whenAmISet被设置为"set in preProcess"。
3、调用子类全局变量初始化,whenAmISet被设置为"set when declared"。
4、调用子类的构造函数。
4、番外
如果全局变量whenAmISet,没有设置初始化值,那么会设置为默认值。对象为null,int为0。
局部变量,不会设置初始化值,需要显示设置,不能直接使用。
C++构造函数初始化列表必须要显示初始化参数。和Java不同。
0 0
- Java构造时成员初始化的陷阱
- Java构造时成员初始化的陷阱
- Java构造时成员初始化的陷阱
- Java构造时成员初始化的陷阱
- Java构造时成员初始化的陷阱
- Java 构造时成员初始化的陷阱
- Java构造时成员初始化的陷阱
- Java构造时成员初始化的陷阱
- Java构造时成员初始化的陷阱
- java中成员初始化与构造器初始化的顺序
- Java编程陷阱-类成员初始化
- Java类成员变量、普通成员变量、初始化块、构造方法的初始化和执行顺序
- Java类成员变量、普通成员变量、初始化块、构造方法的初始化和执行顺序
- Java类成员变量、普通成员变量、初始化块、构造方法的初始化和执行顺序
- Java类成员变量、普通成员变量、初始化块、构造方法的初始化和执行顺序
- Java类成员变量、普通成员变量、初始化块、构造方法的初始化和执行顺序
- Java类成员变量、普通成员变量、初始化块、构造方法的初始化和执行顺序
- Java类成员变量、普通成员变量、初始化块、构造方法的初始化和执行顺序
- java中实现域名解析
- python等概率输出数组中任一元素
- oracle之自动增长序列
- 移动通信课论
- linux iscsi-initiator-utils下的安装配置
- Java 构造时成员初始化的陷阱
- html表格中画斜线
- WebView的截屏实现
- IE7下不支持jquery.attr("onclick","function(){}"),
- objective-c 读取文本文件编码方式(stringWithContentsOfFile和initWithContentsOfFile)
- 如何使用ADSP BF53x的SPI接口[学习心得]
- 【设计模式】——日本队的简单工厂模式
- OFDM原理
- 最简单的网页分享代码