java异常的一点小体会

先看下面两段代码

A

public 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:第一次写技术性的东西,轻点砸........

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值