我正在搞一點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