2016-01-22 58 views
8

我所做的所有Google搜索似乎都集中在「捕捉」錯誤。如果滿足某些條件,我希望能夠提出自己的意見。我嘗試使用Error()類及其子類,但Eclipse無法識別它們。如何在Java中引發錯誤?

這就是我想做的事:

if(some_condition) { 
    foobar(); 
} 
else { 
    // raise an error 
} 

愚蠢的問題,我知道,但我做我的谷歌搜索和我的身影有人在那裏將能夠幫助我。

在此先感謝!


謝謝大家!如果您在未來讀這篇文章,這裏的瘦:

  1. 錯誤在Java中參考的問題,你不應該試圖捕捉

  2. 例外是指,你可能想趕上錯誤。

這裏是我的「固定」代碼:

if(some_condition { 
    foobar(); 
} 
else { 
    throw new RuntimeError("Bad."); 
} 

我以前RuntimeError()因爲,作爲一個答案中指出,我沒有宣佈我事先拋出一個錯誤,並自我依賴於一個條件,這非常有用。

謝謝大家!

+0

http://stackoverflow.com/questions/1754315/how -to-create-custom-exceptions-in-java – Jayan

+0

請將您的發現發佈爲答案並將其標記爲正確,以便人們能夠輕鬆地分辨出問題與答案之間的差異。 –

+1

它應該是: throw new RuntimeException(「Bad。」); –

回答

13

在這裏你去:

throw new java.lang.Error("this is very bad"); 

更地道拋出異常的子類。特別是RuntimeException未被選中(例如,方法不需要聲明它們可能會拋出它)。 (好吧,錯誤也是,但它應該被保留用於不可恢復的事情)。

throw new java.lang.RuntimeException("this is not quite as bad"); 

注意:您實際上並不需要在此刻構建它們。你可以扔預構建的。但構建它們的一件好事是,它們記錄它們所在的代碼行以及構建時發生的完整調用堆棧,因此,在創建新調用時,如果構建一個新的調用堆棧,它會向其注入非常有用的診斷信息。

+0

太棒了!我會給你「接受」的答案thingy,但是@Tim Biegeleison的s/o,他也非常有幫助:^) –

5

嘗試拋出一個異常:

public void yourMethod() throws Exception { 
    if (some_condition) { 
     foobar(); 
    } 
    else { 
     throw new Exception("Something bad happened."); 
    } 
} 
+1

現在我覺得啞巴了。所以異常是java中的錯誤(來自python背景)?這解釋了很多。謝啦。 –

+0

如果你最終編寫好的Java代碼,這並不愚蠢。 –

+0

後續行動(對不起,如果我濫用這個),錯誤和異常之間的區別是什麼? –

1

Java中的錯誤稱爲異常(See this)。

if(some_condition){ 
    foobar(); 
} else { 
    throw new Exception(); 
} 

形式上,錯誤是從Throwable擴展的任何類。

Throwable類是Java語言中的所有錯誤和異常的超類,它們是 。 Java虛擬機僅引發該類的實例對象(或其某個子類),或者Java throw語句可引發 。同樣,只有這個類或其子類中的一個可以是catch子句中的參數類型。對於 編譯時檢查異常的目的,Throwable和任何不屬於 RuntimeException或Error的子類的Throwable的任何子類都被視爲檢查異常。

...

https://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html

1

你試圖提高在僅控制檯錯誤?或者你是否試圖向用戶顯示錯誤?

在這種情況下,您可以使用JOptionPane創建錯誤對話框。

+0

控制檯只,但謝謝你的提示! –

+0

@eli_dink當然:) –

+0

@eli_dink看看這個錯誤與異常:https://stackoverflow.com/questions/5813614/what-is-difference-between-errors-and-exceptions –

1

沒有必要感到愚蠢的:-) 您可以創建自己的異常,例如,

public class UnknownUnitException extends Exception{ 
    private String message = null; 
    public UnknownUnitException() { 
     super(); 
    } 
    public UnknownUnitException(String message) { 
     super(message); 
     this.message = message; 
    } 
    public UnknownUnitException(Throwable cause) { 
     super(cause); 
    } 
    @Override 
    public String toString() { 
     return message; 
    } 
    @Override 
    public String getMessage() { 
     return message; 
    } 
} 

我建議Lesson: Exceptions at the Java Tutorials