黑马程序员技术交流社区

标题: Exception和RuntimeException的问题? [打印本页]

作者: 李会成    时间: 2013-2-3 19:47
标题: Exception和RuntimeException的问题?
本帖最后由 李会成 于 2013-2-4 15:17 编辑
  1. /*
  2. 有一个圆形和长方形
  3. 都可以获取面积,对于面积出现非法的数值,视为获取面积出现问题。
  4. 问题用异常表示。
  5. 设计此程序。
  6. */
  7. interface Shape
  8. {
  9.     public void getArea();
  10. }
  11. class NoValueException extends RuntimeException//Exception
  12. {
  13.     NoValueException(String msg)
  14. {
  15.      super(msg);
  16. }
  17. }
  18. class Rec implements Shape
  19. {
  20. private int len,wid;
  21. Rec(int len,int wid)//throws NoValueException
  22. {
  23.   if(len<=0 || wid<=0)
  24.    throw new NoValueException("出现非法值");
  25.      this.len = len;
  26.      this.wid = wid;
  27. }
  28. public void getArea()
  29. {
  30.      System.out.println(len*wid);
  31. }
  32. }
  33. class  AreaFY
  34. {
  35. public static void main(String[] args)
  36. {
  37.   //try
  38.   //{
  39.    Rec r = new Rec(-4,2);
  40.       r.getArea();
  41.   //}
  42.   //catch (NoValueException e)
  43.   //{
  44.   // System.out.println(e.toString());
  45.   //}
  46.   System.out.println("over");
  47. }
  48. }
复制代码
双斜杠后面为继承Exception的程序。
为什么继承RuntimeException时就不需要try catch了呢??
作者: 李洪因    时间: 2013-2-3 20:14
RuntimeException是Exception的子类,一般来说该异常是程序在运行时抛出这种错误编译是无法捕捉的,如果在程序中不加处理,在程序运行就会产生并上缴给JVM处理。
异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。Java编译器要求方法必须声明抛出可能发生的非运行时异常同,但是并不要求必须声明抛出未被捕获的运行时异常。
exception表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况;Exception表示需要捕捉或者需要程序进行处理的异常。

如果异常是继承RuntimeException,则不需要强制你写try catch语句来保证抛出的异常得到处理。如果继承的是Exception,则一定需要try catch语句保证异常得到处理,或者在该方法中显式声明抛出该异常。
通常如果你的方法显式声明了需要抛出的异常,编译器会提示你需要使用try catch语句来处理这些异常或者声明抛出,否则会有编译错误。对于有些异常是继承RuntimeException的,这些异常是引发unchecked Exception的主要原因,编译器不会提示,但是你也可以使用try catch来捕捉处理。

作者: 李培根    时间: 2013-2-18 11:27
请勿复制他人帖子,技术分不是入学的门槛而是为了帮助大家学习而存在的。

请勿再次发此类帖子了!

此贴就关闭了。此后如有再次发现直接封禁处理,请看到此贴的会员也加以注意。





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