黑马程序员技术交流社区

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

作者: 李平    时间: 2012-4-14 20:29
标题: Exception和RuntimeException的问题?
老师举得一个例子
/*
有一个圆形和长方形
都可以获取面积,对于面积出现非法的数值,视为获取面积出现问题。
问题用异常表示。
设计此程序。
*/
interface Shape
{
    public void getArea();
}
class NoValueException extends RuntimeException//Exception
{
    NoValueException(String msg)
{
     super(msg);
}
}
class Rec implements Shape
{
private int len,wid;
Rec(int len,int wid)//throws NoValueException
{
  if(len<=0 || wid<=0)
   throw new NoValueException("出现非法值");
     this.len = len;
     this.wid = wid;
}
public void getArea()
{
     System.out.println(len*wid);
}
}
class  AreaFY
{
public static void main(String[] args)
{
  //try
  //{
   Rec r = new Rec(-4,2);
      r.getArea();
  //}
  //catch (NoValueException e)
  //{
  // System.out.println(e.toString());
  //}
  System.out.println("over");
}
}
双斜杠后面为继承Exception的程序。
为什么继承RuntimeException时就不需要try catch了呢??

作者: 尹博    时间: 2012-4-14 20:33
抛出RuntimeException异常的目的就是为了让程序停掉,这时需要修改代码,因此不需要进行处理,也不需要在函数上声明。
作者: 邓斌    时间: 2012-4-14 20:34
Exception 中有一个特殊的子类异常。RuntimeException运行时异常
如果在函数内抛出该异常,函数上可以不用声明,编译一样通过。
如果在函数上声明了该异常,调用者可以不用处理。编译一样通过

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

对于异常分两种:
1。编译时被检测的异常。

2。编译时不被检测的异常(运行时的异常RuntimeException)
作者: 邓斌    时间: 2012-4-14 20:37
把我上面的看一下。我在简单说一下。就能理解了
函数上没有声明所以不用try{}catch{}
你在函数内声明。调用着不用处理。编译一样通过。程序停止。出现异常。就是你自定义的异常。
作者: 马强    时间: 2012-4-14 20:52
RuntimeException 是那些可能在 Java 虚拟机正常运行期间抛出的异常的超类,就是顶

他有很多子类,处理各种各样的运行时跳出的异常。不用try因为不需要让调用者处理,毕老师有几个例子很形象
try是因为为了错误不影响其他的运作,而runtime,这出错了下面也没有意义了。


作者: 李平    时间: 2012-4-14 20:53
RuntimeException当出现问题需要终止程序时用,不需要用户处理,所有不需要main函数中try catch,这样理解对吧?
非常感谢,谢了。。




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