public class ghyghost { public static void main(String[] args) { try{
System.out.println(4/0);
int ghy[]=new int[1];
ghy[9]=9;
}
catch(ArithmeticException e){System.out.print(e);}
catch(Exception e){System.out.print(e);}
}}为什么catch(Exception e){System.out.print(e);}没有输出?感谢

解决方案 »

  1.   

    4/0的异常已经被catch(ArithmeticException e)抓住了。
      

  2.   

    但Exception 是ArithmeticException 的父类,难道不执行?
      

  3.   

    把你的e打上引号,catch(Exception e){System.out.print("e");}
      

  4.   

    这里就是算法错误啊,有没有ArithmeticException这里结果都一样,
    如果把ArithmeticException去掉只捕捉Exception e,也会出现同样的结果。
      

  5.   

    尝试变换一下顺序,编译会报错。“exception java.lang.ArithmeticException has already been caught”
      

  6.   

    好像在哪本书上看过Java的运行机制就是这样,一个异常当然只能被catch一次,就象一个罪犯不可能被两个机构逮捕
      

  7.   

    先看下面两段代码Apublic class EeceptionTest{         
     
     public static void main(String[] args){
            int a=1,b=0,c=1;
            try{
           c=a/b;
       }
       catch(Throwable te){
        System.err.println("Throwable te");
       }
       catch(Exception e){
         System.err.println("Exception e");
       }    
     }
    } B public class EeceptionTest{
     
     public static void main(String[] args){
            int a=1,b=0,c=1;
            try{
           c=a/b;
       }
       catch(Exception e){
         System.err.println("Exception e");
       }
       catch(Throwable te){
        System.err.println("Throwable te");
       }
     }
    }看出他们的区别了吗?哪个是正确的呢?也许你会说两个都正确,事实是这样吗?我们看看运行的结果 A:已经捕捉到异常:java.lang.Exception B:Exception e
    为什么会出现这种情况?只要你再仔细看看catch里面的异常类都知道原因了,众所周知,Throwable类是Exception类的基类,在A程序中Thowable类异常已经把Exception类异常给截走了,打个比方:你拿着水壶去打水,而水已经被一个拿桶的家伙全倒走了。当然你就打不到水啦。而程序B,你用水壶打了水,然后把它放在桶里面带走,水依然在水壶里。虽然你觉得这很滑稽,但是它起码不至于出错! 既然程序A有问题,那么可以不可以再用一个异常处理程序来捕捉呢?即这样 public class EeceptionTest{         
     
     public static void main(String[] args){
            int a=1,b=0,c=1;
        try{
            try{
           c=a/b;
         }
       catch(Throwable te){
        System.err.println("Throwable te");
       }
       catch(Exception e){
         System.err.println("Exception e");
       }
      }
       catch(Throwable tte){
        System.err.println("Throwable tte");
       }    
     }
    }结果还是:已经捕捉到异常:java.lang.Exception,为什么?
    如果这个问题都想不通,那就该真正回补下基础知识了,试问:程序A是错误还是异常呢?^_^,想明白了吧?这个问题也困扰了我好久,后来才明白自己真的好菜!汗!!!。补基础去了!总结:
       1、如果try语句后面有多个catch语句块,则catch里面的异常类如果存在联系,则子类应该放在基类上面。
       2、搞清楚异常和错误的区别。ps:第一次写技术性的东西,轻点砸........
      

  8.   

    一个异常只能被捕获一次,而且各个catch的次序也是从异常的子类到父类这样一个顺序。所以一般来说,catch(Exception e)都会被放在最后一个,因为它是异常的父类
      

  9.   

    Exception放在最后可是个好东西呢
    方便你调试
    但是做项目就别这样了
    实事求事有几个异常就写几个
      

  10.   

    TO 踏雪而歌所以一般来说,catch(Exception e)都会被放在最后一个,因为它是异常的父类
    为什么放最后一个,我只写子类异常,不写父类异常,那Exception 异常启不是没有任何作用了》那还写什么?
      

  11.   

    有时以防万一,要是出一个异常你上面都没有捕获到话,你最好放一个exception就可以捕获,要是前面已经捕获了也不会取执行下面的大异常
      

  12.   

    其实也可以这样理解,catch有点象switch...case中的case结构,每次catch后,我们可以想象为后面有个break,让程序直接跳过其他的catch,运行下面的其他程序了.