我一些其他的答案一致認爲的正確答案的問題是,選項3選項4說:
- 主要方法應該簡單地終止,如果發生任何異常。
請注意此選項中的「任何」。下面是其中發生異常的代碼示例,但main()
不會終止:
public static void main(String[] args) throws FileNotFoundException {
try {
methodThatThrowsACheckedException();
} catch (SomeCheckedException e) {
// do something to handle this exception
}
}
在這段代碼中發生異常,但該方法不會終止,因爲它已經建立,以處理這個異常。如果這個例外是未被捕獲的UncheckedException
,那麼該方法當然會終止。然而,選項4的意義在於,任何反例都會使其無效,因爲它表示出現「任何」異常。
選項3,但是,限制了這種終止於僅當在方法的簽名拋出異常發生:
- 如果發生
FileNotFoundException
主要方法應該簡單地終止。
之所以選擇3更有意義,因爲類似於下面的代碼是沒有意義的實踐:
public static void main(String[] args) throws FileNotFoundException {
try {
methodThatThrowsFileNotFoundException();
} catch (FileNotFoundException e) {
// do something to handle this exception
}
}
它沒有太大的意義來聲明一個方法拋出一個異常,但在方法中捕獲該異常(除非可能在執行某些操作後重新拋出它,在這種情況下,方法3仍然存在,因爲方法最終終止)。
嗯,但問題是關於'公共靜態無效的主要(字串[] args)拋出FileNotFoundException異常 '簽名,不是一般 – PermGenError
好了,測試了一下,如果你把比'FileNotFoundException'它贏得了其他經過檢查的異常不會編譯。否則,如果該方法拋出一個未經檢查的異常,那麼它將簡單地結束傳播未經檢查的異常。 – ElderMael
嗯,真的。 +1 :) – PermGenError