你們能解釋什麼是throw
,throws
和Throwable
之間的差異以及何時使用哪個?異常處理:拋出,拋出和拋出
回答
throws
:編寫方法時,用於申報有問題的方法拋出指定的(檢查)異常。與檢查異常相反,可能會拋出運行時異常(NullPointerExceptions等),而無需聲明方法聲明
throws NullPointerException
。throw
:指示實際拋出異常。 (或者更具體地說,Throwable)。該throw關鍵字後面跟着一個
Throwable
(通常是一個例外)的引用。
例子:
Throwable
:你必須爲了創建自己的,定製的,拋出擴展類。
例子:
Throw
用於拋出異常,throws
(如果我猜對了),用來表示該方法可以拋出特定的異常,而Throwable
類是所有錯誤和異常的在Java
擲 - 它是用來拋出Exception.The throw語句需要一個參數:可拋出類對象
拋出 - 這是用來指定方法可以拋出異常
Throwable - 這是Java語言中所有錯誤和異常的超類。您只能拋出從Throwable類派生的對象。拋出包含在其創建
throw
時間的線程的執行堆棧的快照:聲明拋出對象t
其中t instanceof java.lang.Throwable
必須是真實的。throws
:通過該方法指定檢查異常的方法簽名令牌throw
。java.lang.Throwable
:可以引發(並捕獲)的所有對象的父類型。
+1爲膠囊答案。 – 0x6900 2014-10-13 09:33:02
這很容易理解。
的java.lang.Throwable的:
的
Throwable
類是 所有錯誤,並在Java語言 異常的超類。只有 對象是此類 類(或其某個子類)的實例爲 的Java虛擬機或 可引發的Javathrow
語句。 類似地,只有這個類或其中的一個 其子類可以是catch
子句中的參數 類型。 More
的關鍵詞拋出在方法聲明中使用,這說明什麼樣的異常[Throwable的類]我們可能期望從這一方法。
關鍵詞throw用於拋出Throwable類實例的對象。
恐怕看到一些例子:
我們創造我們自己的異常類
public class MyException super Exception {
}
的,我們創建一個從我們的異常類創建一個對象,並拋出一個方法它使用關鍵字throw。
private void throwMeAException() throws MyException //We inform that this method throws an exception of MyException class
{
Exception e = new MyException(); //We create an exception
if(true) {
throw e; //We throw an exception
}
}
當我們要使用的方法throwMeAException()
,我們不得不照顧它在特定的方式,因爲我們有它拋出的東西,在這種情況下,我們有三個選擇的信息。
第一種選擇:
private void catchException() {
try {
throwMeAException();
}
catch(MyException e) {
// Here we can serve only those exception that are instance of MyException
}
}
第二個選項是通過異常
private void passException() throws MyException {
throwMeAException(); // we call the method but as we throws same exception we don't need try catch block.
}
第三個選項是捕捉並重新拋出異常
private void catchException() throws Exception {
try {
throwMeAException();
}
catch(Exception e) {
throw e;
}
}
恢復,當您需要停止某些操作時,您可以拋出將返回的異常,直到不是某個try-catch塊的服務器。無論您使用哪種方法引發異常,您都應該通過try-catch塊來處理它,或者將聲明添加到方法中。
這條規則的例外是java.lang.RuntimeException
那些不需要聲明。這是異常使用方面的另一個故事。
很好的例子。感謝您花時間和精力向我解釋這一點。 – Sumithra 2010-10-15 09:00:38
投擲:
用於實際拋出異常,而拋出是聲明的方法。它們不可互換。
throw new MyException("Exception!);
拋出:
這是當你沒有在你的代碼中使用的try catch語句中使用,但你知道,這個特殊的類是能夠投擲某某異常(只檢查例外)。在這裏,你不使用try catch塊,而是在你的代碼的適當位置使用throw子句來寫入,並且拋出異常給方法的調用者並由它處理。當函數可能拋出檢查異常時,也會使用throws關鍵字。
public void myMethod(int param) throws MyException
相同的答案同上,但與複製粘貼樂趣:
public class GsonBuilderHelper {
// THROWS: method throws the specified (checked) exception
public static Object registerAndRun(String json) throws Exception {
// registering of the NaturalDeserializer
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(Object.class, new NaturalDeserializer());
Gson gson = gsonBuilder.create();
Object natural = null;
try {
// calling the NaturalDeserializer
natural = gson.fromJson(json, Object.class);
} catch (Exception e) {
// json formatting exception mainly
Log.d("GsonBuilderHelper", "registerAndRun(json) error: " + e.toString());
throw new Exception(e); // <---- THROW: instance of class Throwable.
}
return natural;
}
}
在Java中Throwable :
,所有的錯誤的和execption的類是從java.lang.Throwable的類drieved。它是錯誤和例外類的層次結構的頂部。只有作爲此類(或其某個子類)的實例的對象由Java虛擬機拋出,或者可以由Java throw語句拋出。
Throws:
是post-method修飾符,並指定該方法可能拋出哪些執行選項。如果它們是檢查異常,編譯器將保證調用該方法的代碼必須捕獲這些檢查的異常。
Throw:
語句用於引發錯誤或異常。 throw語句需要一個參數:Throwable類或Throwable類的任何子類的實例。執行throw語句會觸發JVM引發此異常並導致發生異常。
列出幾個...
擲
- 的Java
throw
關鍵字用來明確throw
異常。 - 只有使用
throw
才能傳播檢查異常。 Throw
後面是一個實例。Throw
在該方法內使用。- 您不能
throw
多個例外。
拋出
- 的Java
throws
關鍵字來聲明一個例外。 - 檢查異常可以用
throws
傳播。 Throws
其次是類。Throws
與方法簽名一起使用。- 您可以聲明多個例外
public void method()throws IOException,SQLException
有兩種主要類型的例外:
運行時例外(未選中):例如。 NullPointerException,ClassCastException,..
檢查異常:例如。 FileNotFoundException,CloneNotSupportedException,..
運行時異常是在運行時發生的異常,開發人員不應該試圖捕捉它或停止它。只有編寫代碼才能避免它們,或者在滿足錯誤條件時發出命令throw。我們在方法體內使用throw。
public Rational(int num, int denom){
if(denom <= 0) {
throw new IllegalArgumentException("Denominator must be positive");
}
this.num=num;
this.denom=denom;
}
然而,對於檢查異常,在JVM希望你來處理它,並給編譯錯誤,如果沒有處理好,所以你聲明它拋出作爲clone()方法在下面看到,異常的類型。
Class Employee{
public Employee clone() throws CloneNotSupportedException{
Employee copy = (Employee)super.clone();
copy.hireDate = (Date)hireDate.clone();
return copy;
}
}
1. throw keyword used to throw user defined exceptions.(we can throw predefined exception too).
2. Using throws keyword we can explicitly provide the information about unhand-led exceptions of the method to the end user, Java compiler, JVM.
擲VS拋出
http://www.instanceofjava.com/2016/04/exception-handling-interview-questions.html
- 1. 拋出異常不拋出
- 2. 魔術異常拋出拋出異常
- 3. 拋出異常拋出異常
- 4. 拋出異常
- 5. 異常拋出
- 6. 拋出異常
- 7. 拋出異常
- 8. 拋出異常
- 9. 拋出異常
- 10. 拋出異常
- 11. 拋出異常
- 12. GridMVC網格拋出拋出異常?
- 13. LINQ查詢拋出拋出異常
- 14. 拋出或重新拋出異常?
- 15. 對象類拋出類拋出異常
- 16. 從列表中拋出拋出異常時拋出IndexOutOfBoundsException:Java-> Kotlin
- 17. @ControllerAdvice不處理拋出的異常
- 18. Wcf異常處理拋出錯誤
- 19. 處理onSubmitAction後拋出異常
- 20. 處理IntList.remove()拋出的ArrayIndexOutOfBounds:10異常
- 21. 斷言處理的異常被拋出
- 22. 嘗試拋出異常處理
- 23. 處理由QPluginLoader :: load()拋出的異常:
- 24. 處理(畢加索)拋出的異常
- 25. 未處理的異常拋出PhotoChooserTask
- 26. 處理屬性值,拋出異常
- 27. LLVM異常拋出
- 28. socket.connect拋出異常
- 29. 類拋出異常
- 30. os.getcwd()拋出異常
Java有沒有。它有一個Throwable類的'throw'方法,它在方法頭部有一個'throws'關鍵字。他們是兩個完全不同的東西。首先忘掉「拋出」,然後找出拋出的東西。 'throws'只是爲了讓編譯器保持高興。 – 2015-01-09 18:26:16