62,615
社区成员
发帖
与我相关
我的任务
分享
void test() {
int i;
if(true)
i = 8;
System.out.println(i);//这里没有报错,JAVA编译器认为i=8这行代码一定会执行
if(true)
return;//按照上面的想法,JAVA编译器应该也会认为这行代码一定会执行,那么下面一行的代码应该就是Unreachable code,但实际这样写就是没有错
System.out.println("code");
}
import java.io.PrintStream;
public class Main1
{
public static void main(String[] args)
{
new Main1().test();
}
void test()
{
int i = 8;
System.out.println(i);
}
}
这是反编译后的代码
if(true)
return;
System.out.println("code");
这段代码虽然从逻辑上说最后一句永远不可能执行,但是在编译的时候并不会做这种检查。编译器认为最后一句话当条件判断为错误的时候是可以执行的,所以不会给出错误提示。当然某些IDE会给出警告,但不是错误。[/quote]
你说得完全错误,这里编译器已经确定条件肯定是为真的了,我用的是 “true” 这个字面量,而不是一个"true"引用变量, 你肯定没有写过 while(true) 这种代码, while(true) 后面有代码也不能通过编译[/quote]
while(true)后面有代码也不能通过编译?你确定?只要while(true)里面有break语句就可以通过编译呀
if(true)
return;
System.out.println("code");
这段代码虽然从逻辑上说最后一句永远不可能执行,但是在编译的时候并不会做这种检查。编译器认为最后一句话当条件判断为错误的时候是可以执行的,所以不会给出错误提示。当然某些IDE会给出警告,但不是错误。[/quote]
你说得完全错误,这里编译器已经确定条件肯定是为真的了,我用的是 “true” 这个字面量,而不是一个"true"引用变量, 你肯定没有写过 while(true) 这种代码, while(true) 后面有代码也不能通过编译[/quote]
大哥你真敢说话呀,用过java多线程的谁没有写过while(true)语句,while(true)是一个死循环,if(ture)是么?
if(true)
return;
System.out.println("code");
这段代码虽然从逻辑上说最后一句永远不可能执行,但是在编译的时候并不会做这种检查。编译器认为最后一句话当条件判断为错误的时候是可以执行的,所以不会给出错误提示。当然某些IDE会给出警告,但不是错误。[/quote]
你说得完全错误,这里编译器已经确定条件肯定是为真的了,我用的是 “true” 这个字面量,而不是一个"true"引用变量, 你肯定没有写过 while(true) 这种代码, while(true) 后面有代码也不能通过编译
if(true)
return;
System.out.println("code");
这段代码虽然从逻辑上说最后一句永远不可能执行,但是在编译的时候并不会做这种检查。编译器认为最后一句话当条件判断为错误的时候是可以执行的,所以不会给出错误提示。当然某些IDE会给出警告,但不是错误。void test() {
return;
System.out.println("code");
}
可能我没说清楚,那为何上面这行代码直接就报错,我说的报错不是指警告,而是说 Error