例一:
class test {
public String test() {
if(true){
return "";
}
else{
return "";
}
}
}
上面這樣即可通過編譯,但是下面這兩個例子卻不能通過編譯:
(一)
class test {
public String test() {
if(true){
return "";
}
}
}
(二)
class test {
public String test() {
if(isTrue()){
return "";
}
else if(!isTrue()){//兩個if裡的判斷包括了所有的可能性,但是還是編譯期error
return "";
}
}
boolean isTrue(){
return true;
}
}
結論1:
對於(一),這是因為java編譯器認定單獨的if語句只在當一定條件滿足情況下才執行,它認為if不會有任何情況下都能執行的能力。
對於(二),這是因為java編譯器對if else 語句能夠全面囊括所有情況的能力只限定在的if...else(或if...else if...else)時,而不包括if...else if。
再看例二:
class test {
public String test() {
while(true){
return "";
}
}
}
上面這樣即可通過編譯,但是下面這樣不行:
class test {
public String test() {
while(isTrue()){
return "";
}
}
boolean isTrue(){
return true;
}
}
結論2:
這是因為編譯器認為while語句有在任何情況下都能執行的能力,但是只在入參為true的情況下有該能力。
再看例三:
public class test {
String test() throws Exception{
throw new Exception();//拋出異常後,跳出程序,程序中止
}
}
結論3:
如果函數中創建了異常,並拋出,則該函數可以不返回值。