下面的类是正常的,但是在该类中(一)处这样写没有错误,但是将(一)处改成 throw new Exception;却出现了编译错误呢?这是什么情况?
class Demo {
int div(int a ,int b){
if(b==0)
throw new ArithmeticException("除以零了");//(一)
return a/b;
}
}
class ExceptionDemo{
public static void main(String[] args){
Demo d=new Demo();
try{
int x=d.div(8,0);
System.out.println("x="+x);
}catch(ArithmeticException e){
System.out.println(e.toString());
System.out.println("除数出现负数了");
}
System.out.println("over");
}
} 作者: 罗海云 时间: 2013-3-2 20:01
应该是因为你抛出了不具体异常, 可以在类名后面声明一下需要抛异常..throws Exception作者: 杨剑 时间: 2013-3-2 20:14
因为ArithmeticException是RuntimeException(运行时)异常的子类,如果抛出的是运行时异常则不需要声明可能抛出的异常,也就是不需要在div()方法这里声明 throws ArithmeticException,但是如果改成Exception,他不是运行时异常,需要在div()方法上声明throws Exception作者: 谢洋 时间: 2013-3-2 22:53
package test2;
class Demo {
int div(int a ,int b){//如果是非运行时异常,且不做catch处理,必须在此声明抛出
if(b==0)
throw new Exception("除以零了");//编译时异常,要么catch;要么抛
return a/b;
}
}
class ExceptionDemo{
public static void main(String[] args){
Demo d=new Demo();
try{
int x=d.div(8,0);
System.out.println("x="+x);
}catch(ArithmeticException e){//如果上面抛出什么,就捕获取什么,不能随意catch
System.out.println(e.toString());
System.out.println("除数出现负数了");
}