2017-03-05 84 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语句来工作。