A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张秀威 中级黑马   /  2013-11-3 00:46  /  1174 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张秀威 于 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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
To + 1 很给力!

查看全部评分

6 个回复

倒序浏览
必须是这样啊,RuntimeException这个是运行时异常,在编译时不报错,且在函数上不用throws,如果有异常,在java运行时,如果没有catch,那么直接交给jvm处理。
而RuntimeException的父类Exception,是编译时报错,如果在语句中有throw,且没有自己catch,那么必须在函数上声明(即throws)。

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报
加油啊!
回复 使用道具 举报
异常分两类:1,编译时被检测的异常;2,编译时不被检测的异常(运行时异常);

RuntinmeException是Exception的一个特殊子类;

RuntinmeException及其子类就是属于第二种运行时异常的;如果函数内容抛出此异常,函数可以不用声明,编译一样通过;如果函数上声明了该异常,调用者可以不用处理,一样能通过编译

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1 鼓励一个~

查看全部评分

回复 使用道具 举报
如果问题已经解决,请及时修改主题为“提问结束”。
修改主题的方法链接
http://bbs.itheima.com/thread-89313-1-1.html
回复 使用道具 举报
该异常出现时,不希望调用者进行处理。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马