以下代码不会给出 compile-error Unreachable statement
。
if(true)return;
int x;
多年来我一直认为这是因为编译器不太注意给定的条件。
今天发现编译器理解了条件,
int x;
if (true) {
x = 0;
}
int y = x;
因为如果不是,这应该导致另一个 compile-error variable x might not have been initialized
。事实上,它可以完美地编译和运行。所以,
java 编译器是否理解if
语句中给出的条件?
Unreachable Statements致力于精确解释“reachable”这个词。这个想法是从包含语句的构造函数、方法、实例初始值设定项或静态初始值设定项的开始到语句本身必须有一些可能的执行路径。分析考虑了报表的结构。除了while、do和条件表达式为常量true的语句的特殊处理外,流分析中不考虑表达式的值。
例如,Java 编译器将接受以下代码:
int n = 5;
while (n > 7) k = 2;
即使 的值n
在编译时是已知的,并且原则上可以在编译时知道k
永远不会执行对 的赋值。
本节中的规则定义了两个技术术语:
语句是否可达
一个语句是否可以正常完成
此处的定义允许语句只有在可达时才能正常完成。
为了缩短规则的描述,习惯用缩写“iff”表示“当且仅当”。
来源 :
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句