先看下面两段代码
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:第一次写技术性的东西,轻点砸........