日期:2014-05-20  浏览次数:20762 次

java throw问题,为什么为什么?抓狂了
class ThreadDemo{
static void a(int c){
try {
throw new ArithmeticException();
}catch(ArithmeticException e)
{
System.out.println("static ThreadDemo class :"+e);
throw e; }

}

}编译运行成功

class ThreadDemo{ 
static void a(int c){ 
try { 
throw new Exception(); 
}catch(Exception e) 

System.out.println("static ThreadDemo class :"+e); 
throw e; //ERROR 




} 编译错误



------解决方案--------------------
ArithmeticException 继承了 RuntimeException,所以属于运行时异常,而运行时异常是不需要捕获的。

而 Exception 属于普通异常,是需要进行捕获或者抛出处理的,代码如下:

Java code
class ThreadDemo {    
    static void a(int c) throws Exception {
        try {
            throw new Exception();
        } catch (Exception e) {
            System.out.println("static ThreadDemo class :" + e);
            throw e;
        }
    }
}

------解决方案--------------------
楼上,不是的,不是的。

只要是继承了 RuntimeException 类的异常都是不需要进行捕获和处理的,
直接扔给 JVM 去处理了,而 ArithmeticException 就是继承自它的。

再比如:IOException 是继承自 Exception 的,Exception 的异常是必须
进行捕获处理的。

虽然说 RuntimeException 也是继承自 Exception 的,里面的方法实现也
都是 super 来实现的,JVM 可能已经预定义了这个标记,让其成为运行时
异常。
------解决方案--------------------
楼上,不是的,不是的。
_________________________

汗,在发帖时插进了一条回复,应是:楼上楼上的。
------解决方案--------------------
ArithmeticException 没有必要去捕获或者是抛出,即使是这样做了这是没有错的。
当然了,捕获的话可以增加程序的健壮性。