2015-09-28 95 views
1

親愛的朋友我是java中的異常處理初學者。我從一個教程中得到了這個示例,我運行這個代碼打印出的Arithmetic異常。如果我刪除那個參數爲ArithmeticException的方法,那麼稱爲第一個方法是print Exception。 請任何人都可以解釋這段代碼發生了什麼。在java中有參數「異常處理類對象」的方法

public class Question1 { 

    public static void javaHungry(Exception e) { 
    System.out.println("Exception"); 
    } 

    public static void javaHungry(ArithmeticException ae) { 
    System.out.println("ArithmeticException"); 
    } 

    public static void javaHungry(Object obj) { 
    System.out.println("Object"); 
    } 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
    javaHungry(null); 
    } 

} 
+1

使用'null'調用方法需要調用最具體的方法。在你的情況下,它首先是'ArithmeticException',因爲它是最具體的。 ''異常'是更具體的對象,因此如果你刪除'javaHungry(ArithmeticException ae)'方法 – SomeJavaGuy

回答

2

當您重載方法並傳遞一個適合所有人的參數時,可以在運行時選擇最具體的方法。

這裏排除基本的順序是

ArithmeticException > Exception > Object 

1)如果您刪除方法與ArithmeticException它選擇Exception
2)如果您刪除方法Exception它選擇Object

+0

嗨suresh非常感謝你的答覆和解釋,但我的疑問是異常是所有其他異常的超類類。那麼arithmeticexception是如何被指定的比例外。請解釋。 – user3379282

+0

你在想相反的。根據你的邏輯,它應該調用Object對嗎?由於Object是Exception的超類。 –

+0

謝謝suresh,但抱歉​​,我仍不清楚這一點。 「最具體的方法」我沒有得到這意味着什麼。因爲異常也是空的,算術也是空的。但爲什麼它發生請幫助我。 – user3379282