Java类构造方法中不同类型语句存在限制

来源:互联网 发布:java编写的游戏引擎 编辑:程序博客网 时间:2024/06/08 05:23
Java类构造方法中存在5种类型的语句:super调用基类构造器方法语句,this调用本类构造器方法语句,触发本类"非静态数据成员定义初始化"的语句,触发本类"非静态数据成员初始化语句"的语句,其他语句。
这5种类型语句的“存在和是否显式”情况描述如下:super调用基类构造器方法语句,可显式存在,可隐藏存在,也可不存在;this调用本类构造器方法语句,可显式存在,也可不存在;触发本类"非静态数据成员定义初始化"的语句,可隐藏存在,也可不存在;触发本类"非静态数据成员初始化语句"的语句,可隐藏存在,也可不存在;其他语句,显式存在。

这5种类型语句的存在需要满足以下限制规则:
1、当“this调用本类构造器方法语句”显式存在时,“super调用基类构造器方法语句”,“触发本类'非静态数据成员定义初始化'的语句”,“触发本类'非静态数据成员初始化语句'的语句”都不可存在,否则会在本构造器中执行这3个语句,也会在this调用语句指向的构造器方法中执行这3个语句,导致这3个语句被多次执行,而这是不被允许的。因而,此时,只允许“其他语句”存在。
注意,这个限制解决了以下这样的一个问题:
要求“super调用基类构造器方法语句”必须为本类构造器的第一条程序语句,也要求“this调用本类构造器方法语句”必须为本类构造器的第一条程序语句,那么当两条语句都出现时,谁是第一条呢。以上限制已经使得这种情形不会出现。
2、当“this调用本类构造器方法语句”不存在时,在构造器方法中,“super调用基类构造器方法语句”,“触发本类'非静态数据成员定义初始化'的语句”,“触发本类'非静态数据成员初始化语句'的语句”,“其他语句”都存在(有个特殊情况,当类为Object时,“super调用基类构造器方法语句”不存在)。其中,“super调用基类构造器方法语句”可隐藏存在,也可显式存在;“触发本类'非静态数据成员定义初始化'的语句”,隐藏存在;“触发本类'非静态数据成员初始化语句'的语句”,隐藏存在;“其他语句”,显式存在。
0 0
原创粉丝点击