2011-11-27 25 views
3

我的理解是,在Java中,如果某個方法聲明返回類型,如果我們不在方法中放入return語句,則編譯將失敗。但下面的代碼編譯成功。Java基礎 - 對方法中的返回類型和返回語句有點混淆

public int test() throws Exception{ 
     throw new Exception("exception"); 
    } 

現在我有點困惑。我認爲我的理解是錯誤的。有人可以澄清? 謝謝。

回答

10

Java方法必須返回或拋出異常。如果所有可能的代碼路徑不會導致返回或異常,編譯器會拒絕編譯。此方法中的唯一代碼路徑會引發異常,因此它是有效的。

會是什麼無效的會是這樣,因爲如果i <= 0,什麼都不會返回,並不會引發任何異常:

public int test() throws Exception { 
    int i = new Random().nextInt(); 
    if (i > 0) { 
     throw new Exception("exception"); 
    } 
} 

這將是有效的,如果改成

public int test() throws Exception { 
    int i = new Random().nextInt(); 
    if (i > 0) { 
     throw new Exception("exception"); 
    } 
    else { 
     return 0; 
    } 
} 
+2

我想補充一點,這是返回值的正常方法。 Excelption是處理可能發生的錯誤的不同機制。兩者都不相等,不應該使用異常機制來代替返回,以提供一種將值傳遞給調用者的額外方式。 – Snicolas