黑马程序员技术交流社区
标题:
关于RuntimeException和Exception的区别
[打印本页]
作者:
晓风妮子
时间:
2013-4-18 13:41
标题:
关于RuntimeException和Exception的区别
本帖最后由 晓风妮子 于 2013-4-20 13:22 编辑
RuntimeException和Exception有什么区别呢?为什么抛了RuntimeException在函数上不用声明throws Exception呢?
作者:
hdsjsql
时间:
2013-4-18 13:51
Exceptoin中有一个特殊的子类异常RuntimeException 运行时异常。
如果在函数上声明了该异常。调用者可以不用进行处理。编译一样通过;
之所以不用在函数声明,是因为不需要让调用者处理。当该异常发生,希望程序停止。因为在运行
时,出现了无法继续运算的情况,希望停止程序后,对代码进行修正。
自定义异常时:如果该异常的发生,无法在继续进行运算,就让自定义异常继承RuntimeException。
作者:
陈中岩
时间:
2013-4-18 14:09
excetion是所有异常的总称,就是根异常:
写代码的try{}catch{}语句的时候,如果有多个exception直接抛出一个exception就能将所有的exception抛出了,你也可以将所有的不同exception依依抛出。
runtimeexcetion是具体的某一个异常:
RuntimeException 是那些可能在 Java 虚拟机正常运行期间抛出的异常的超类。
可能在执行方法期间抛出但未被捕获的 RuntimeException 的任何子类都无需在 throws 子句中进行声明。
RuntimeException是由于你程序设计的有漏洞`比如 1/0~的情况~ 正确设计不会出现的` 一般不捕获或处理~
下面是例子来说明
/*
有一个圆形和长方形。
都可以获取面积。对于面积如果出现非法的数值,视为是获取面积出现问题。
问题通过异常来表示。
现有对这个程序进行基本设计。
*/
class NoValueException extends RuntimeException
//这里继承了RuntimeException,下面就不用再throws NoValueException了。
{
NoValueException(String message)
{
super(message);
}
}
interface Shape
{
void getArea();
}
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 Circle implements Shape
{
private int radius;
public static final double PI = 3.14;
Circle(int radius)//这里的throws NoValueException也可以不用标识了
{
if(radius<=0)
throw new NoValueException("非法");
this.radius = radius;
}
public void getArea()
{
System.out.println(radius*radius*PI);
}
}
//因为继承了RuntimeException,主函数里也就不用再try catch处理了。
//程序出现非法值以后,程序直接结束。
class ExceptionTest1
{
public static void main(String[] args)
{
Rec r = new Rec(3,4);
r.getArea();
Circle c = new Circle(-8);
System.out.println("over");
}
}
复制代码
作者:
李大伟
时间:
2013-4-18 15:02
查了API
Exception 类及其子类是 Throwable 的一种形式,它指出了合理的应用程序想要捕获的条件
RuntimeException 是那些可能在 Java 虚拟机正常运行期间抛出的异常的超类。
可能在执行方法期间抛出但未被捕获的 RuntimeException 的任何子类都无需在 throws 子句中进行声明。
public class RuntimeException extends Exception
RuntimeException 是继承了 Exception
作者:
庄生晓梦
时间:
2013-4-18 21:07
RuntimeException 是Exception的子类,RuntimeException是运行时异常,该异常如果在函数中抛出异常,
函数上可以不用声明;如果在函数上声明了该异常,就不用对其处理了。
不用在函数上生明,是因为当该异常发生时,希望程序停止,因为运行时,出现了无法运算的情况。
作者:
疯狂程序
时间:
2013-4-18 21:17
你就记住运行异常RuntimeException 编译不会报错,而Exception编译会报错,Exception包括RuntimeException
作者:
王大斌
时间:
2013-4-19 00:55
在java中,异常分为免检异常和必检异常,一定要分清这两个概念
为什么免检异常不用处理呢?是因为它出现的地方随意,你并不知道你写的程序在哪里有错,如3/0这种。你不可能去全部处理这种
这就一个免检异常。对于RuntimeException来说,就是这种异常。
Exception作为异常类的老大。但是它并不是所有异常的根,还有一个error表示系统错误,一般由系统引起。
所以error和RuntimeException都是免检异常。
作为免检异常,既不用处理,也不用声明,jvm机自动去处理
对于必检异常来说,要不做处理,也就是使用try catch
要不抛出 并声明throws ,也就是抛出异常后并不知道怎么去处理,而是让调用者去做处理
作者:
黄玉昆
时间:
2013-4-19 07:15
如果问题未解决,请继续追问,如果问题解决了,请将问题分类改为“已解决”,谢谢
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2