總之,爲什麼這是允許的?爲什麼Java允許您打破當前行?
label1: while (condition)
label2: if (condition)
label3: break label3;
我能理解標註的while
這樣你就可以提前結束,或if
這樣你就可以打破一個if
而不是另一個,但爲什麼break
?您何時需要break
出於目前的break
?
經過測試,我發現label3: break label3;
運行,但什麼都沒做,繼續下一行。 這有什麼功能?
另請注意,Java不會讓您打破所有語句。例如,label: Object o = new Object();
會給出編譯器錯誤,指出它不是一個聲明,並且預計會出現;
,儘管它確實運行了Object
的構造方法(並且,正如我們在Why does Java allow for labeled breaks on arbitrary statements?中看到的,Java允許您標記方法調用; label: new Object();
編譯正好)。
http://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#jls-14.7 – kosa
簡單的語言定義?在語言層面禁止它會更加複雜;但允許它看起來相當無害。另一種方法是在代碼分析期間標記它。 –