黑马程序员技术交流社区

标题: 运行时异常抛出问题 [打印本页]

作者: 张秀威    时间: 2013-11-3 00:46
标题: 运行时异常抛出问题
本帖最后由 张秀威 于 2013-11-3 21:02 编辑

实现这个RuntimeException之后叫运行时异常,那么为什么我在下面的int method()方法中抛出异常之后,而在int method()方法上不用声明呢,还有一种情况就是我在int method()方法上声明了异常之后,为什么调用者可以不用进行异常处理且照样通过编译呢
  1. class FuShuException1 extends RuntimeException
  2. {
  3.         FuShuException1(String msg)
  4.         {
  5.                 super(msg);
  6.         }
  7. }
  8. class Demo4
  9. {
  10.         int method(int a,int b) //throws ArithmeticException  这里怎么不用声明了???而且也没有编写代码进行异常处理!!
  11.         {
  12.                 if(b<0)
  13.                         throw new FuShuException1("除数出现负数啦");
  14.                 if(b==0)
  15.                         throw new ArithmeticException("被零除了");
  16.                
  17.                 return a/b;
  18.         }
  19. }
  20. public class RunTimeException {

  21.         public static void main(String[] args) {
  22.                 Demo4 d=new Demo4();
  23.                 System.out.println(d.method(5,-8));
  24.                 System.out.println("over");
  25.         }

  26. }
复制代码

作者: 回天之力    时间: 2013-11-3 08:36
必须是这样啊,RuntimeException这个是运行时异常,在编译时不报错,且在函数上不用throws,如果有异常,在java运行时,如果没有catch,那么直接交给jvm处理。
而RuntimeException的父类Exception,是编译时报错,如果在语句中有throw,且没有自己catch,那么必须在函数上声明(即throws)。
作者: 黄炳期    时间: 2013-11-3 10:51
加油啊!
作者: Uncle.Lee    时间: 2013-11-3 12:33
异常分两类:1,编译时被检测的异常;2,编译时不被检测的异常(运行时异常);

RuntinmeException是Exception的一个特殊子类;

RuntinmeException及其子类就是属于第二种运行时异常的;如果函数内容抛出此异常,函数可以不用声明,编译一样通过;如果函数上声明了该异常,调用者可以不用处理,一样能通过编译
作者: 黄炳期    时间: 2013-11-3 13:30
如果问题已经解决,请及时修改主题为“提问结束”。
修改主题的方法链接
http://bbs.itheima.com/thread-89313-1-1.html
作者: 冯国强    时间: 2013-11-3 17:42
该异常出现时,不希望调用者进行处理。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2