在学习毕向东老师_JavaSE-第09天-11-面向对象(RuntimeException)的课程时
边学边跟着写了如下代码:
class D {
public int div(int a, int b) {//第二行
if(0==b)
throw new ArithmeticException("000000000");
return a/b;
}
}
class A {
public static void main(String[] args) {
D d = new D();
int x = d.div(4,0);
}
}
课程中老师讲ArithmeticException是RuntimeException的子类
不用在函数上声明也可编译通过,
问题来了,
以上代码我怎么也不能编译通过,报错信息:
A.java:4: 错误: 未报告的异常错误ArithmeticException; 必须对其进行捕获或声明以便
抛出
throw new ArithmeticException("000000000");
^
1 个错误
相当郁闷啊,把ArithmeticException换成RuntimeException却是OK的.
把第二行改为 public static void main(String[] args) throws ArithmeticException {
也还是不行,只有加上上面语句之后再在下面的语句上TRY一下才能通过编译.
经过一番研究才找到了原因,原来是这样的,在上面代码之前,我编译过如下代码:
class ArithmeticException extends Exception {
ArithmeticException(String msg) {
super(msg);
}
}
class D {
public int div(int a, int b) throws ArithmeticException {
if(0==b)
throw new ArithmeticException("000000000");
return a/b;
}
}
class A {
public static void main(String[] args) {
D d = new D();
try {
int x = d.div(4,0);
}
catch (ArithmeticException e) {
System.out.println(e.toString());
}
}
}
相当于自己重写了一个ArithmeticException类
这样一来,在源目录下就产生了一个ArithmeticException.class的文件,然后在编译一楼的代码时,就直接在同目录下找到了这个文件,结果就报错啦!!
一点经验,共勉之!!!