[英]unreachable code detected in loop
为什么我在else循环的'b'上检测到无法访问的代码?
private void a1_Click(object sender, EventArgs e)
{
Button b = (Button)sender;
if (true)
{
b.Text = "X";
}
else
{
b.Text = "O";
}
turn = !turn;
}
看来您打算写:
private void a1_Click(object sender, EventArgs e)
{
Button b = (Button)sender;
if (turn)
{
b.Text = "X";
}
else
{
b.Text = "O";
}
turn = !turn;
}
如前所述, if(true)
块将始终被评估,而else
块不可访问。
注意:这里只是个注释,这就是我要使用三元运算符的地方(只要遵循的约定允许您使用。[运算符的用法应保持一致])。
您会得到b.Text = turn ? "X" : "O"
b.Text = turn ? "X" : "O"
代替if/else
块。 您还可以在静态最终变量中将“ X”和“ O”声明为常量,以提高可读性并简化修改。
else
部分将永远不会到达,因为编译器已经知道第一个条件if(true)
将始终被执行。
如果由于语句无法访问而无法执行该语句,则是编译时错误。
在这种情况下,编译器非常聪明,如果将其转换为以下代码,则它将永远不会出现此错误
boolean flag = true
if(flag){
b.Text = "X";
}else{
b.Text = "O";
}
现在尝试这个:
int x=5;
if (false) { x=3; } // same Dead code
上面的JLS部分中有更多解释。
这是一个例子:
while(true){
System.out.println("hello");
}
System.out.println("bye"); // this line is in problem
现在使用相同的标志,但使其final
final boolean flag = true;
while(flag ){
System.out.println("hello");
}
System.out.println("bye"); // still this line is in problem
// because compiler knows that final variable never be changed once assigned
JVM已经在编译时评估了您的代码,并且知道else部分将永远不会被重新部署
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.