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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李平 初级黑马   /  2012-4-14 20:29  /  2097 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

老师举得一个例子
/*
有一个圆形和长方形
都可以获取面积,对于面积出现非法的数值,视为获取面积出现问题。
问题用异常表示。
设计此程序。
*/
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了呢??

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

5 个回复

倒序浏览
抛出RuntimeException异常的目的就是为了让程序停掉,这时需要修改代码,因此不需要进行处理,也不需要在函数上声明。

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

回复 使用道具 举报
Exception 中有一个特殊的子类异常。RuntimeException运行时异常
如果在函数内抛出该异常,函数上可以不用声明,编译一样通过。
如果在函数上声明了该异常,调用者可以不用处理。编译一样通过

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

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

2。编译时不被检测的异常(运行时的异常RuntimeException)
回复 使用道具 举报
把我上面的看一下。我在简单说一下。就能理解了
函数上没有声明所以不用try{}catch{}
你在函数内声明。调用着不用处理。编译一样通过。程序停止。出现异常。就是你自定义的异常。
回复 使用道具 举报
RuntimeException 是那些可能在 Java 虚拟机正常运行期间抛出的异常的超类,就是顶

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

回复 使用道具 举报
RuntimeException当出现问题需要终止程序时用,不需要用户处理,所有不需要main函数中try catch,这样理解对吧?
非常感谢,谢了。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马