使用 if(true) 和 if(false)

ZDNet软件频道 时间:2003-01-10 作者:BUILDER.COM 翻译:Java研究组织 |  我要评论()
本文关键词:javatips
开发人员调试代码期间,有时希望能够提前中断或者注释掉大块代码。这时,可以使用if(true)和if(false)语句。通常,开发人员使用/* */来注释大块的代码。然而,在有些情况下,使用if(false)是一个更简便的方法。

开发人员调试代码期间,有时希望能够提前中断或者注释掉大块代码。这时,可以使用if(true)和if(false)语句。

通常,开发人员使用/**/来注释大块的代码。然而,在有些情况下,使用if(false)是一个更简便的方法。例如:

Iteratoritr = something.callMethod();
while(itr.hasNext()) {
doThings(itr);
}
something.close();
在这个代码片断中,while循环可以通过添加一行if(false) 很容易地注释掉。完全不用担心在while循环或者循环结尾是否有/**/注释语句。仅仅添加上if(false),例如:

Iteratoritr = something.callMethod();
if(false)
while(itr.hasNext()) {
doThings(itr);
}
something.close();
if(false)、if(true)组合也很有用。在下面的代码中,调用了所有的方法:

publicvoid someMethod(Object obj) {
doFirst(obj);
doSecond(obj);
doThird(obj);
doFourth(obj);
doFifth(obj);
....
}
在第二个方法调用后,注释掉剩余部分,开发人员可以使用/**/注释语句,或者蹩脚地放置一个if(false) 。但是如果开发人员希望放置一个return情况会怎样?例如:

publicvoid someMethod(Object obj) {

doFirst(obj);
doSecond(obj);
return;

doThird(obj);
doFourth(obj);
doFifth(obj);
;....
;}

不幸的是,这样不能通过编译:

///// javac:
code/ComplexTest.java:15: unreachable statement
Complex c = new Complex(3,4);
^
1 error
///// jikes:
Found 1 semantic error compiling "code/ComplexTest.java":

<-----------------------------
Complexc = new Complex(3,4);
.. .
System.out.println(Complex.conjugate(c));
------------------------------------------------>
*** Error: These statements are unreachable.
然而,可以使用if(true)使编译器认为这是合法的:

publicvoid someMethod(Object obj) {
doFirst(obj);
doSecond(obj);
if(true) return;

doThird(obj);
doFourth(obj);
doFifth(obj);
....
;}

if(true)语句也可以用于带有break语句的for循环或者while循环中。

总之,if(true)和if(false)语句在逻辑上是多余的,但是Java编译器并不分辨这些,所以它们可以用来帮助调整程序的行为。了解这些,对于调试期间调整代码的行为给开发人员更多的选择。



责任编辑:炒饭

欢迎评论或投稿


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134