java的Exception类是所有类的基类,基类不如它的子类具体,父类有的东西子类都有(构造方法除外),可是子类有的东西父类不一定有,可是为什么Exception类几乎能捕捉到所有异常呢,不明白。

解决方案 »

  1.   

    多态嘛,因为Exception是所有的异常的父类,我是这么认为的,
      

  2.   

    Exception是所有异常类的基类,子类可以说是父类,比如说 男人是人,所以可以捕捉!
      

  3.   

    我还是不明白。
    要是多态的话得有所体现呀,可是通常都是这样的形式,比方说:   .......
       }catch(Excetpion e){
          System.out.println(e.message);
       }.......
     多态一般通过构造函数体现,可是这里什么也没有,在这里,你能看得出它是一个类的父类么?
      父类的范围大?父类的东西子类都有,只有构造函数除外,,我的认为是:既然出了一个子类,那么子类一般是添加新的方法的,父类没有这个方法,依着这个思维下去,很不幸地发现,在Exception遭遇重大挫折,课本说Exception能捕捉到所有的异常,那么诸如ArrayIndexOutOfBoundsException类的特点父类都有喽?可是ArrayIndexOutOfBoundsException不是它的子类么。
     现在发现就是用多态的观点解释才可能行得通,但是就像前面我写得代码,它没有多态的影子,高手帮下.
        
      

  4.   

    所有异常都是Exception的子类。
      

  5.   

    比如一个电灯无法打开的异常,可以有灯丝损坏的子异常,有供电系统损坏的异常,开关损坏的异常。开关损坏异常可能有按钮无法按下的子异常。捕捉时这样
    try{
       ...抛出异常exception
    }catch(按钮无法按下 e1){
       1...
    }catch(开关损坏 e2){
       2...
    }catch(电灯无法打开 e3){
       3...
    }
    多态体现在处理的部分,如果跑出来的异常是开关损坏异常,那么e1就无法捕捉到,e2和e3可以捕捉到,因为他们都是电灯无法打开异常。如果没写e2,那么e3可以捕捉到异常,并且如果在e3内调用e3.printStrack();就相当于调用开关损坏的pringStrack()方法。这个是多态。
    异常捕捉不是用多态来进行判断的,是用exception instanceof 按钮无法按下,exception instanceof 开关损坏,exception instanceof 电灯无法打开,这种类型判断来捕捉的。
    因为所有的异常都是Exception的子类,所以所有的异常 instanceof Exception都是true,所以可以捕捉所有的异常。
    另外建议如果一定要这样捕捉,还是捕捉Throwable比较好。