簡體   English   中英

JAVA中的異常處理和throws語句的使用

[英]Exception Handling in JAVA and Use of throws statement

為什么會這樣呢? 這段代碼可以正常編譯,但在運行時會引發異常

public class Except
{
    public static void main(String args[])
    {
        System.out.println("Hey, I am under main");
        method();
    }
    static void method()
    {
        throw new NullPointerException();
    }
}

但是這段代碼沒有編譯

public class Expect
{
    public static void main(String args[])
    {
        System.out.println("Hey, I am under main");
        method();
    }
    static void method()
    {
        throw new IllegalAccessException();
    }
}

為什么會這樣呢?改變異常的類型,第二個代碼沒有編譯。有人可以解釋一下,我在第一個代碼中使用了throw語句,由於它的編譯很好,那么編寫throws語句的用途是什么與方法聲明。 我正在使用jdk 1.8.0_45

NullPointerExceptionRuntimeException的子類,這使其成為未經檢查的異常,該異常不必在throws子句中進行處理或聲明。

IllegalAccessException是一個已檢查的異常,因此必須捕獲該throws或在可能引發該throws的任何方法的throws子句中聲明該throws

如果添加throws子句,則第二個代碼段將編譯:

static void method() throws IllegalAccessException
{
    throw new IllegalAccessException();
}
  1. 必須按照try-catch異常處理中的描述明確捕獲或傳播檢查的異常。 未經檢查的異常不必捕獲或聲明為拋出。

  2. Java中的檢查異常擴展了java.lang.Exception類。 未經檢查的異常擴展了java.lang.RuntimeException。

未檢查的例外列表:

ArrayIndexOutOfBoundsException  
ClassCastException  
IllegalArgumentException  
IllegalStateException  
NullPointerException  
NumberFormatException  
AssertionError
ExceptionInInitializerError 
StackOverflowError 
NoClassDefFoundError 

檢查的異常列表:

Exception 
IOException 
FileNotFoundException 
ParseException 
ClassNotFoundException 
CloneNotSupportedException 
InstantiationException 
InterruptedException    
NoSuchMethodException   
NoSuchFieldException

從用戶的角度來看,我想對已檢查和未檢查的異常之間的差額加兩美分。

想象一個簡單的應用程序,用戶在其中注冊一個提供姓名,姓氏和電話號碼的系統。

首先讓我們看一下檢查的異常。 如果用戶在name字段中輸入12312312,則app應該拋出一個已檢查的異常。同樣,如果用戶輸入angelo作為電話號碼,則app也應該拋出一個已檢查的異常。 因為12312312都不是一個人的有效名稱,所以angelo也不是電話號碼。 在這種情況下,我們使用檢查異常。 因為它基本上是用戶錯誤,並具有適當的反饋,所以用戶可以糾正此類錯誤。

另一方面,未檢查的異常不是用戶異常。 對於這種情況,用戶根本無能為力。 例如,與數據庫的連接可能會丟失。 或者,當開發人員為上述示例創建數據庫字段時,他可能會將數據庫中的名稱字段定義為布爾值字段。 (我在這里有點誇張)。

我希望這也會有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM