2017-03-05 10 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に、何を言っているのは「ExceptionまたはExceptionのサブタイプであるすべてのものをキャッチします。この場合、ArithmeticExceptionが含まれていることである。

0

これらは、2つの独立したものです。 第一の場合は、そのジェネリック型であります2番目は逆で、例外は特定の型と一致し、見つからなければクラス階層を上って次のジェネリック型と一致するまで次の型を探します。

この特定のシナリオでは、AEはEのサブクラスであるため、AEを持たない場合は、階層の上の次の汎用タイプに一致します。例外は、例外

です
0

スーパークラスはそのサブクラスを知らない。つまり、サブクラスは直接のスーパークラスを知っています。

あなたcatch文は一種のinstanceofオペレータとif文のようなものです:

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

instanceof演算子は、論理的に左側にオブジェクトのクラスを取得し、それかどうかをチェックすることにより行われ、または任意のさスーパークラスのうち、オペレータの右側にあるクラスです。あなたが見ることができるように

そう、それはおよそArithmeticExceptionを知っているExceptionはありません、それはそのcatch文が動作するためには、およそExceptionを知っているArithmeticExceptionです。