2015-05-28 34 views
-1

我正在學習Java並遇到關鍵字throws。我開始知道它用於我們不能處理或不會處理的異常。如何使用投擲?

爲什麼我們不能只用exception.printstacktrace?或者是否有任何情況下throws可以執行自動異常處理,或者只是讀者知道該方法可以拋出異常的簡單關鍵字?

+0

您是否閱讀過[例外的Java教程](https://docs.oracle.com/javase/tutorial/essential/exceptions/)? –

+0

檢查異常和'throws'用於通常**應該**處理更高級別的異常,或者記錄方法的用戶應該準備處理的異常。 –

回答

1

實用用法

如果您正在研究企業應用程序,並且任何異常都出現在中間層,那麼這些異常需要傳播給控制器,這是throws關鍵字的一個實際示例。

在這樣的應用程序中,我們在控制器中編寫導航邏輯並處理日誌記錄,所以有必要將異常消息傳播到控制器層。

1

當您聲明您的方法throws SomeCheckedException時,您需要方法的用戶來處理該異常(或者聲明如果他們無法處理該異常,則自行拋出)。這是該方法合同的一部分。

3

如果方法不處理檢查的異常,則該方法必須使用throws關鍵字聲明它。 throws關鍵字出現在方法簽名的末尾。

通過使用throw關鍵字,可以引發異常,可以是新實例化的異常,也可以是剛捕獲的異常。嘗試瞭解拋出和拋出關鍵字的不同之處。
And'throws'不執行任何異常處理,它只是告訴將異常處理委託給調用方法,因爲它沒有在調用的方法中完成。

exception.printStackTrace() 

exception.getMessage() 

您可以打印僅在例外逮住堆棧跟蹤。基本上java遵循一個規則拋出或處理檢查異常。處理異常捕捉它們。 還要記住,有些地方你總是必須處理你的異常,但你可以自由選擇你想要處理的應用程序流中的哪個地方。
And'throws'不執行任何異常處理它只是告訴將委託異常處理調用方法,因爲它沒有在調用的方法中完成。這樣調用的方法是知道的例外它必須處理或再扔回去的(但正如前面所說的一些地方已被處理)

PS:有非常好的question爲被的printStackTrace認爲是不好的

1

不想處理?永遠不會發生,你總是必須處理你的例外。但是當你拋出一個異常時,這意味着你不想在這個函數中處理這個異常,並且你想在另一個地方處理這個異常。

1

實用用法取決於人的要求!

假設我開發了具有animateImages(InputStream image)現在,如果一個有效的圖像傳遞,但是這是什麼方法將正常工作的方法,如果你傳遞一個PDF這種方法的API,這種方法悲慘的失敗了。

所以,如果我將處理異常,我只是把stackTrace()和記錄什麼是錯的,但是這對你沒用。

我希望你知道原因並做出相應的反應併發送有效的圖像文件或任何你想做的事情。

這就是爲什麼我們通常會在我們希望消費者處理它時拋出任何異常。