2017-03-05 32 views
-4

我讀過超類對象可以指向子類對象,但不知道子類的內容。 那麼超類如何才能捕獲類型子類的異常呢?Exception類如何知道ArithmeticException類?

我很困惑。請人幫忙

class abc { 
    public static void main(String k[]) { 
     try { 
      int a = 0; 
      int b = 56/0; 
     } catch (Exception e) { 
      System.out.println(" divide by zero "); 
     } 

    } 
} 

回答

0

ArithmeticExceptionException一個亞型。所以,在你catch,你的意思是「趕上一切,這是ExceptionException亞型。在這種情況下,包括ArithmeticException

0

這是兩個獨立的事情。 第一種情況是,一個泛型類型第二種是反向的,其中異常與他的特定類型相匹配,如果沒有找到,則上升到類別層級以找到下一個通用類型,並且下一個通用類型直到一個匹配爲止

在這個特定的場景中,AE是E的一個子類,因此如果你沒有AE,它就會匹配到層次結構中的下一個通用類型,即異常

0

超類不知道它的子類。這是另一種方式,即一個子類知道它是直接的超類。

catch說法是有點像一個if聲明與instanceof操作:

if (thrownException instanceof Exception) { 
    Exception e = (Exception) thrownException; 
    System.out.pritnln("divide by zero"); 
} 

instanceof操作邏輯通過獲取左側的類的對象和檢查做,如果它,或任何它是超類,是運營商右側的類。

所以,你可以看到,它不是Exception它知道ArithmeticException,這是ArithmeticException它知道Exception,以便爲catch語句來工作。