2015-05-30 100 views
4

考慮以下幾點:Java中,默認的異常消息

public abstract class Test { 
    public static void main(String[] args) { 
     int[] testArray = {6, 3, 2}; 
     System.out.println(testArray[3]); 
    } 
} 

當我運行該程序,我得到:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3 
    at Test1.main(Test1.java:5) 

在這種情況下,JVM顯示爲出界,即3索引。

拋開這個特定的例子,考慮到我選擇不在程序的代碼中發現異常:

  1. 如何查找,對於任何異常,無論是選中還是取消選中,JVM將顯示的默認消息是什麼?

  2. 對於我自己編寫的自定義異常類,以及在我的代碼中使用'throw'關鍵字生成的此類的對象(但是,再次選擇不捕獲),我可以設置一個JVM將顯示的默認消息?

回答

5
  1. 我怎樣才能發現,對任何異常,選中或未選中,默認的消息會是怎樣的JVM會 顯示?

正如你可能已經懷疑的那樣,答案是「一般來說,你不能」。大多數情況下,消息是從接受字符串消息的異常的構造函數之一中設置的。如果你幸運的話,該信息將是有意義的,並提供有用的信息。否則,就像通常的做法那樣,異常的語義本質上將存在於它的類名和關聯的Javadoc中。還要考慮異常消息通常是本地化的。

  • 對於我寫自己,並且爲此類,我在使用「擲」關鍵字 我的代碼生成(但同樣的對象的自定義異常類,選擇不要捕捉它),我可以設置JVM將顯示的默認消息 ?
  • 這完全取決於你。您可以在默認構造函數中設置默認消息,如下所示:

    public class MyException extends Exception { 
        public MyException() { 
        super("my default message"); 
        } 
    
        public MyException(String message) { 
        super(message); 
        } 
    } 
    
    3

    Thread.setDefaultExceptionHandler,所有捕獲的異常會去那裏,所以你可以提供自己的異常處理程序,在程序開頭的某處一個參數傳遞給該方法。

    我想,你也可以自己構造的任何異常並看到信息如下

    new IOException().getMessage() 
    

    雖然可能在這種情況下,該消息將是空的,我沒有嘗試

    1

    任何異常是類型或擴展運行時異常是未經檢查的異常。其餘都是檢查異常。

    你只需要擴展運行時異常,那麼你不需要處理拋出的異常。您可以通過替代getMessage方法來打印該例外的默認消息。

    3

    我只能回答你的第二個問題。 在您的Exception類(它應該從java.lang.Exception派生)中添加(覆蓋)接受String的構造方法作爲參數。將你想拋出的異常的消息傳遞給新的構造函數等。→你得到了一個個性化的消息,用於你的異常。如果您需要默認消息,只需使用默認消息中的此構造函數即可。希望有所幫助。