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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 曹德君 中级黑马   /  2013-4-15 15:18  /  1860 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

异常Exception和RuntimeException的应用有啥区别的不是太清晰。不都是抛出异常吗,具体的应用有何区别呢?谁能举个例子写段代码介绍一下。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

7 个回复

正序浏览
好的!忘记改了~
回复 使用道具 举报
黄玉昆 黑马帝 2013-4-15 19:51:57
7#
如果问题未解决,请继续追问,如果没有问题了,请将帖子分类 改为“已解决”,谢谢
回复 使用道具 举报
  1. /*
  2. 有一个圆形和长方形。
  3. 都可以获取面积。对于面积如果出现非法的数值,视为是获取面积出现问题。
  4. 问题通过异常来表示。
  5. 现有对这个程序进行基本设计。

  6. */

  7. class NoValueException extends RuntimeException
  8. //这里继承了RuntimeException,下面就不用再throws NoValueException了。
  9. {
  10.         NoValueException(String message)
  11.         {
  12.                 super(message);
  13.         }
  14. }

  15. interface Shape
  16. {
  17.         void getArea();
  18. }

  19. class Rec implements Shape
  20. {
  21.         private int len,wid;

  22.         Rec(int len ,int wid)//这里的throws NoValueException可以不用标识了
  23.         {
  24.                 if(len<=0 || wid<=0)
  25.                         throw new NoValueException("出现非法值");

  26.                 this.len = len;
  27.                 this.wid = wid;
  28.         }

  29.         public void getArea()
  30.         {
  31.                 System.out.println(len*wid);
  32.         }
  33. }


  34. class Circle implements Shape
  35. {
  36.         private int radius;
  37.         public static final double PI = 3.14;

  38.         Circle(int radius)//这里的throws NoValueException也可以不用标识了
  39.         {
  40.                 if(radius<=0)
  41.                         throw new NoValueException("非法");
  42.                 this.radius = radius;
  43.         }

  44.         public void getArea()
  45.         {
  46.                 System.out.println(radius*radius*PI);
  47.         }
  48. }



  49. //因为继承了RuntimeException,主函数里也就不用再try catch处理了。
  50. //程序出现非法值以后,程序直接结束。
  51. class  ExceptionTest1
  52. {
  53.         public static void main(String[] args)
  54.         {       
  55.                
  56.                 Rec r = new Rec(3,4);
  57.                 r.getArea();

  58.                 Circle c = new Circle(-8);

  59.                 System.out.println("over");
  60.        
  61.         }
  62. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
excetion是所有异常的总称,就是根异常:
写代码的try{}catch{}语句的时候,如果有多个exception直接抛出一个exception就能将所有的exception抛出了,你也可以将所有的不同exception依依抛出。
runtimeexcetion是具体的某一个异常:
RuntimeException 是那些可能在 Java 虚拟机正常运行期间抛出的异常的超类。
可能在执行方法期间抛出但未被捕获的 RuntimeException 的任何子类都无需在 throws 子句中进行声明。
RuntimeException是由于你程序设计的有漏洞`比如 1/0~的情况~ 正确设计不会出现的` 一般不捕获或处理~



评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
当函数内有throw抛出异常对象,并未进行try catch处理,必须要在函数上声明,否则编译失败。但是RuntimeException除外,函数内如果抛出的是RuntimeException异常的话,函数上可以不用声明。
回复 使用道具 举报
Exceptoin中有一个特殊的子类异常RuntimeException 运行时异常。

如果在函数内容抛出该异常,函数上可以不用声明,编译一样通过。

如果在函数上声明了该异常。调用者可以不用进行处理。编译一样通过;

之所以不用在函数声明,是因为不需要让调用者处理。
当该异常发生,希望程序停止。因为在运行时,出现了无法继续运算的情况,希望停止程序后,
对代码进行修正。

对于异常分两种:
1,编译时被检测的异常。
       
2,编译时不被检测的异常(运行时异常。RuntimeException以及其子类)


评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
Exception(除RuntimeException以外): 必须使用try...catch进行处理。

RuntimeException:
可不使用try...catch进行处理,如果出现异常,则有jvm来处理。
所有方法都可以在不声明throws的情况下抛出RuntimeException及其子类 。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马