关于 if(true) 与 Unreachable code 编译器并不会做这种检查。如果这样也去检查的话,那需要检查的太多了。例如下面这种等等 boolean b = true; if (b) return; 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 估计搂住是用JDK javac编译的,有些IDE是会报个警告的,比如eclipse,不知道javac有没有类似的选项控制这种检查 你的代码不规范!我给你规范了一下:static void test() { int i; if(true){ i = 8; } System.out.println(i); if(true){ return; } System.out.println("code");//此处MyEclipse画黄线了,提示dead code,快捷操作为删除 } 2楼版主大大,正解。eclipse的javadoc会报警的,但楼主指的那行在运行时还是会执行,那么下一行就无法访问了。 void test() { return; System.out.println("code"); }可能我没说清楚,那为何上面这行代码直接就报错,我说的报错不是指警告,而是说 Error 这是编译器基于性能考虑没有去检查这种。而其它的 IDE 则提醒我们可能我们写错了代码。 这个问题,楼主把return,break,continue之间区别的搞清,没必要在这块纠结。 这个肯定是报错的呀,return后面不能再跟语句了。至于你说的那个: if(true) return; System.out.println("code");这段代码虽然从逻辑上说最后一句永远不可能执行,但是在编译的时候并不会做这种检查。编译器认为最后一句话当条件判断为错误的时候是可以执行的,所以不会给出错误提示。当然某些IDE会给出警告,但不是错误。 这个肯定是报错的呀,return后面不能再跟语句了。至于你说的那个: if(true) return; System.out.println("code");这段代码虽然从逻辑上说最后一句永远不可能执行,但是在编译的时候并不会做这种检查。编译器认为最后一句话当条件判断为错误的时候是可以执行的,所以不会给出错误提示。当然某些IDE会给出警告,但不是错误。你说得完全错误,这里编译器已经确定条件肯定是为真的了,我用的是 “true” 这个字面量,而不是一个"true"引用变量, 你肯定没有写过 while(true) 这种代码, while(true) 后面有代码也不能通过编译 这个肯定是报错的呀,return后面不能再跟语句了。至于你说的那个: if(true) return; System.out.println("code");这段代码虽然从逻辑上说最后一句永远不可能执行,但是在编译的时候并不会做这种检查。编译器认为最后一句话当条件判断为错误的时候是可以执行的,所以不会给出错误提示。当然某些IDE会给出警告,但不是错误。你说得完全错误,这里编译器已经确定条件肯定是为真的了,我用的是 “true” 这个字面量,而不是一个"true"引用变量, 你肯定没有写过 while(true) 这种代码, while(true) 后面有代码也不能通过编译大哥你真敢说话呀,用过java多线程的谁没有写过while(true)语句,while(true)是一个死循环,if(ture)是么? 这个肯定是报错的呀,return后面不能再跟语句了。至于你说的那个: if(true) return; System.out.println("code");这段代码虽然从逻辑上说最后一句永远不可能执行,但是在编译的时候并不会做这种检查。编译器认为最后一句话当条件判断为错误的时候是可以执行的,所以不会给出错误提示。当然某些IDE会给出警告,但不是错误。你说得完全错误,这里编译器已经确定条件肯定是为真的了,我用的是 “true” 这个字面量,而不是一个"true"引用变量, 你肯定没有写过 while(true) 这种代码, while(true) 后面有代码也不能通过编译while(true)后面有代码也不能通过编译?你确定?只要while(true)里面有break语句就可以通过编译呀 if()条件在编译的时候,其实是不会判断你的条件到底是true还是false,所以当你在if(true) return;后面继续写代码,编译时是判断如果if为false,则后面的代码还有机会执行。但是你直接在if(true){return;再写代码};是肯定会报错的。 楼主有点钻牛角尖,还从来没有见过直接一个return后面有Java代码,if语句中有return倒是很正常的,return前有if(true)和前面没有逻辑判断不是等价的,虽然if(true)肯定会判断通过 是不是要表达这个意思,if()里面的内容在没有运行的时候是没有判断能力的(当然像myeclipse这种工具会自动检查)。而编译器检查你的代码的时候是检查格式或者一些简单的错误并没有逻辑判断能力,如17楼所说,很多错误只能运行时检测出来!所以编译器当成普通的if判断,并没有语法错误,所以没报错。 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) if(false)这样的代码都会被干掉。没啥意思 面试题求帮助~!对IO不是很了解,求大神帮忙~! 关于异常问题/ 关于paint()的问题 请问java 可有unix下compress的压缩类(.Z文件) 百思不得其解,请过路神仙帮忙 做个网络文件系统,请大拿们给个思路 请问用什么容器好? jbuilder8怎么刚装完就出现Class not found的错误呢? 控件对齐问题(jbuild6) again紧急求救!!!!用JAVAMAIL怎样发HTML(has attachments)邮件 String型变量保存了unicode编码,如何把它输出成汉字? TDD是什么啊?
我给你规范了一下:static void test() {
int i;
if(true){
i = 8;
}
System.out.println(i);
if(true){
return;
}
System.out.println("code");//此处MyEclipse画黄线了,提示dead code,快捷操作为删除
}
return;
System.out.println("code");
}可能我没说清楚,那为何上面这行代码直接就报错,我说的报错不是指警告,而是说 Error
return;
System.out.println("code");这段代码虽然从逻辑上说最后一句永远不可能执行,但是在编译的时候并不会做这种检查。编译器认为最后一句话当条件判断为错误的时候是可以执行的,所以不会给出错误提示。当然某些IDE会给出警告,但不是错误。
return;
System.out.println("code");这段代码虽然从逻辑上说最后一句永远不可能执行,但是在编译的时候并不会做这种检查。编译器认为最后一句话当条件判断为错误的时候是可以执行的,所以不会给出错误提示。当然某些IDE会给出警告,但不是错误。你说得完全错误,这里编译器已经确定条件肯定是为真的了,我用的是 “true” 这个字面量,而不是一个"true"引用变量, 你肯定没有写过 while(true) 这种代码, while(true) 后面有代码也不能通过编译
return;
System.out.println("code");这段代码虽然从逻辑上说最后一句永远不可能执行,但是在编译的时候并不会做这种检查。编译器认为最后一句话当条件判断为错误的时候是可以执行的,所以不会给出错误提示。当然某些IDE会给出警告,但不是错误。你说得完全错误,这里编译器已经确定条件肯定是为真的了,我用的是 “true” 这个字面量,而不是一个"true"引用变量, 你肯定没有写过 while(true) 这种代码, while(true) 后面有代码也不能通过编译
大哥你真敢说话呀,用过java多线程的谁没有写过while(true)语句,while(true)是一个死循环,if(ture)是么?
return;
System.out.println("code");这段代码虽然从逻辑上说最后一句永远不可能执行,但是在编译的时候并不会做这种检查。编译器认为最后一句话当条件判断为错误的时候是可以执行的,所以不会给出错误提示。当然某些IDE会给出警告,但不是错误。你说得完全错误,这里编译器已经确定条件肯定是为真的了,我用的是 “true” 这个字面量,而不是一个"true"引用变量, 你肯定没有写过 while(true) 这种代码, while(true) 后面有代码也不能通过编译
while(true)后面有代码也不能通过编译?你确定?只要while(true)里面有break语句就可以通过编译呀
{
public static void main(String[] args)
{
new Main1().test();
} void test()
{
int i = 8;
System.out.println(i);
}
}这是反编译后的代码