2010-08-04 94 views
22

我想拋出一個異常,在我這樣的代碼:如何拋出的RuntimeException(「無法找到符號」)

throw RuntimeException(msg); 

但是當我建立在NetBeans中我得到這個錯誤:

C:\....java:50: cannot find symbol 
symbol : method RuntimeException(java.lang.String) 
location: class ... 
     throw RuntimeException(msg); 
1 error 

我需要導入一些東西嗎?我拼錯了嗎?我敢肯定,我必須做一些愚蠢的:-(

+3

爲什麼你想要拋出一個RuntimeException? – 2010-08-04 13:58:42

+6

@JonathonFaust - 因爲有時你既不想自己處理異常,也不想強制用戶處理異常。但如果沒有人處理它,應用程序應該會崩潰。在Python中,幾乎每個異常都是運行時異常,每個人都喜歡它。如果你知道應該如何處理異常,那麼你應該處理它,如果你不知道,那麼你就會忽略它 - 無論你上面有人能夠處理它,否則你會崩潰,並且兩種情況都沒有問題。唯一不好的就是記錄它,否則忽略它。 – ArtOfWarfare 2015-09-10 14:34:34

+0

不要拋出運行時異常或創建RuntimeException的子類,僅僅是因爲您不想因指定您的方法可能拋出的異常而煩惱。 http://journals.ecs.soton.ac.uk/java/tutorial/java/exceptions/runtime.html – 2015-11-10 11:08:35

回答

84

throw new RuntimeException(msg)

您需要在那裏new。它創建一個實例,並拋出它,而不是調用一個方法。

+1

爲什麼要拋出一個RuntimeException?這個世界很瘋狂...... – PedroD 2016-01-12 11:50:12

+0

@PedroD \t因爲檢查的異常是一個失敗的實驗嗎?或者你問爲什麼有人想拋出一個* raw *'RuntimeException而不是一個合理的子類? – 2016-02-21 19:48:37

+0

不,不檢查異常應該是你可以使用的唯一類型的throwables。它們是您正在創建/定義的API的一部分。未檢查的異常應該保留給不能/不應該被恢復的系統錯誤(如NullPointer或OutOfMemory)。例如。如果我有一個從字符串中解析數字的函數,它應該會拋出一個** checked ** NumberFormatException,因爲預期這個函數可能會因爲這個原因而失敗,並且我完全可以從中捕獲並從中恢復錯誤,所以應該檢查...但是,如果我得到一個空指針... – PedroD 2016-02-21 19:59:51

4
throw new RuntimeException(msg); // notice the "new" keyword 
33

ExceptionObject像任何其他Java中,你需要使用new關鍵字來創建一個新的Exception才能throw它。

throw new RuntimeException(); 

可選,你也可以做到以下幾點:

RuntimeException e = new RuntimeException(); 
throw e; 

兩個代碼片段是等價的。

Link to the tutorials for completeness.

3

您需要創建RuntimeException的實例,用new以同樣的方式,你會創建的其他類的一個實例:

throw new RuntimeException(msg); 
6

,你將有你之前初始化它把它

throw new RuntimeException(arg0) 

PS: Intrestingly足夠NetBeans IDE中應有人ready指出編譯時錯誤

+1

爲什麼downvotes? +1來對付它們。 – 2010-08-04 14:32:20

15

正如其他人所說的,在拋出它之前實例化對象。

只想添加一點;拋出一個RuntimeException是非常罕見的。 API中的代碼拋出此類的子類是正常的,但通常情況下,應用程序代碼會拋出異常,或者擴展了Exception但不是RuntimeException的東西。

而回想起來,我錯過了加入理由爲什麼你使用Exception而不是RuntimeException; @Jay,在下面的評論中,加入了有用的位。 RuntimeException不是檢查的異常;

  • 方法簽名不必聲明可能引發RuntimeException。
  • 該方法的調用者不需要捕獲異常,或以任何方式確認。
  • 試圖稍後使用您的代碼的開發人員不會預料到這個問題,除非他們仔細觀察,並且會增加代碼的維護負擔。
+1

同上。一般來說,你應該創建你自己的異常來拋出異常,並從Exception中繼承它們。 RuntimeException應該謹慎使用,因爲它繞過了Java中的一般保證,即函數必須聲明它可以拋出的所有異常。 – Jay 2010-08-04 16:46:54

+0

這樣做的一個常見情況是,如果您正在實現不聲明任何檢查的異常的現有接口。例如,編寫一個支持網絡的緩存對於實現'Map'是有意義的 - 但是如果在處理put()或get()時出現'IOException',你將不得不拋出一些一種RuntimeException。 (它應該是一個自定義的類,但它必須是一個未經檢查的例外)。 – 2010-08-05 13:51:59

1

只爲其他人:確保它是新的RuntimeException,而不是新的RuntimeErrorException它需要錯誤作爲參數。

1
throw new RuntimeException(msg); 

不同於其他任何異常,我認爲RuntimeException是那些不會拖延程序只有一個,但它仍可以繼續運行,並恢復只是打印出一堆的例外行?糾正我,如果我錯了。

相關問題