我正在搞一点Java和void-method
的return
语句。Java编译器 - 几种方法,相同的行为,不同的输出
在每种方法中,我的Eclipse IDE(Eclipse Mars 4.5.2,Java 7)中的编译器具有不同的输出。我已经写过警告/错误作为对相关行的注释:
public static void foo() {
System.out.println("foo() - 1");
boolean b = true;
if (b)
return;
System.out.println("foo() - 2");
}
public static void foo2() {
System.out.println("foo2() - 1");
// compiler warning: "The value of the local variable b is not used"
boolean b;
if (b = true)
return;
System.out.println("foo2() - 2");
}
public static void foo3() {
System.out.println("foo3() - 1");
if (true) {
return;
}
// compiler warning: "Dead code"
System.out.println("foo3() - 2");
}
public static void foo4() {
System.out.println("foo4() - 1");
return;
// compiler error: "Unreachable code"
System.out.println("foo4() - 2");
}
每种方法都有相同的行为。 if-statement
为真,调用return-statement
。最后的System.out.println(..)
不再被调用。但为什么编译器输出不同的东西呢?
感谢您的帮助!
亲切的问候
PPS:如果我通过javac Test.java
编译这个文件我没有得到任何警告,但我不得不使用手动禁用它们-nowarn
(javac documentation),但我没有这样做:
因为代码是不同的。 – biziclop
编译器足够聪明,可以诊断'if(true)'而不是其他情况 –
发布字节码? – djechlin