`

RuntimeException为啥不用声明抛出?

 
阅读更多

异常,错误都是同一种父类:java.lang.Throwable

IllegalStateException属于RuntimeException,RuntimeException又是Exception的子类

RuntimeException的特点是非受检异常,区别于受检异常,也就是java系统允许可以不catch(当然也可以人为catch,比如特殊业务逻辑需要),在运行时碰到就抛出

关键RuntimeException为什么会被系统允许不被catch...
也就是可能会抛出RuntimeException的方法不被要求在方法throws clause中声明。

原因我想RuntimeException相对那些受检异常有更多的不确定性和普遍性,如果改为受检异常,代价较大,也没必要,因为一般它总不为业务逻辑所容(受检异常就容?也不容!是不是RuntimeException更不为所容?因此不catch直接抛出导致中断程序?也可能中不中断都不是重点,实现代价才是重点)。

对比几个可能会有更好的实感:
受检异常:ClassNotFoundException, SQLException, NoSuchMethodException...
RuntimeException:NullPointerException, IllegalArgumentException, ArithmeticException

 

http://bbs.csdn.net/topics/390279427?page=1#post-392900808

 

RuntimeExceptions are thrown for things that were preventable.


Exceptions are thrown for things that were unpreventable but recoverable


Errors are thrown for things that were unpreventable and unrecoverable.

 

For example, NullPointerExceptions can always be avoided and are therefore unchecked exceptions. A RemoteException could occur when there is a network failure, which cannot be reasonably prevented before the method call and therefore is checked.

 

http://stackoverflow.com/questions/2884836/why-nullpointerexception-is-a-runtime-exception-and-remoteexception-not

分享到:
评论

相关推荐

    异常捕获与抛出的问题,什么时候应该try,什么时候应该throws

    抛出异常是指在方法签名中使用 throws 关键字来声明可能抛出的异常。抛出异常的目的是为了将异常传递给调用者,让调用者来处理异常。 什么时候应该try,什么时候应该throws 当需要在方法内部处理异常时,应该使用 ...

    总结了一下JAVA中常见的几种RuntimeException

    当尝试将一个不能解析为指定数值格式的字符串转换为数值时,会抛出`NumberFormatException`。例如,尝试将包含字母的字符串转换为整数。 9. **`SecurityException` - 安全异常** 当安全策略阻止执行某些操作时,...

    Java 自定义异常和抛出异常

    在这个`readFile`方法中,我们声明它可能会抛出`FileNotFoundException`,这样调用这个方法的代码就必须处理这个异常,或者也用`throws`声明抛出。 在实际应用中,自定义异常和抛出异常常常结合使用。例如,你可能...

    常用的RuntimeException.txt

    当试图将对象强制转换为不兼容的类型时抛出。例如: ```java Object obj = new Object(); String s = (String) obj; // ClassCastException ``` 要解决这个问题,可以先进行类型检查或者使用更安全的转换方式。 #...

    (完整版)Java程序设计任务驱动式教程-任务十四-主动出击(抛出异常).ppt

    在任务十四“主动出击(抛出异常)”中,主要讲述了如何在Java程序中主动抛出异常以及声明和处理异常。 1. **抛出异常**: - 在Java中,如果遇到不符合预期的情况,可以使用`throw`关键字抛出一个异常对象。例如,...

    Java异常处理运行时异常(RuntimeException)详解及实例

    ArithmeticException是指在算术运算中,出现了非法的操作,例如除数为0时抛出的异常。可以使用if判断来避免这种情况。 NullPointerException是指在程序中,试图访问null对象的成员变量或方法时抛出的异常。可以使用...

    Java编程中使用throw关键字抛出异常的用法简介

    在这个例子中,`someMethod`可能会抛出`IOException`,调用`someMethod`的代码必须包含`try-catch`块或者同样声明抛出`IOException`。 ### 自定义异常 有时,标准的Java异常类不足以描述特定的错误情况,这时可以...

    Android自定义抛出异常的方法详解

    17. `RuntimeException`: 运行时异常,可以直接抛出,无需声明`throws`。 18. `TypeNotPresentException`: 类型不存在。 自定义异常可以帮助我们更好地控制和传达错误信息。例如,我们可以创建一个`...

    简单了解Java编程中抛出异常的方法

    `throws`关键字用于声明一个方法可能抛出的异常。如果一个方法在执行过程中可能会遇到无法处理的异常,它可以选择不处理,而是通过`throws`声明这个异常,将异常处理的责任交给调用它的方法。例如: ```java public...

    java异常体系结构

    最后,关于异常的继承,Java规定如果子类方法覆盖了父类的方法,那么它可以声明抛出父类方法所声明的异常的子类,但不允许声明抛出比父类方法声明的异常更严格的异常。如果父类方法没有声明抛出任何异常,则子类方法...

    java异常小结

    已检查异常必须在方法声明中显式列出,因为编译器会强制要求处理这些异常,要么通过try-catch块捕获,要么通过再次声明抛出。相比之下,未检查异常不需要显式声明,因为它们通常表示编程错误,应该在开发阶段被发现...

    浅谈java中异常抛出后代码是否会继续执行

    如果方法可能抛出受检异常,必须在方法签名中声明,或者在方法体内捕获并处理,否则会导致编译错误。 总的来说,Java中异常的处理方式有以下几种: 1. 不捕获异常:如果异常未被捕获,那么后续的代码将不会执行,...

    Java 常见异常(Runtime Exception )详细介绍并总结

    - 使用 `throws` 关键字声明方法可能抛出的异常,是为了让调用者知道这个方法在执行时可能遇到的问题,从而做好异常处理准备。如果方法可能抛出已检查异常,但没有在方法签名中声明,那么编译器会报错。 - 子类...

    Android异常处理

    - **为何抛出的异常必须是已检查异常**:`RuntimeException`和`Error`类及其子类不需要显式声明,它们会在程序运行时自动抛出。已检查异常则是由程序员显式抛出的,需要在方法签名中声明。 ##### 3.2 如何抛出异常 ...

    异常处理.pdf

    可检测异常需要显式地在代码中进行捕获处理或声明抛出;运行时异常是不需要强制处理的异常,这类异常通常由程序逻辑错误引起;错误是指那些严重到程序本身无法处理的问题,如虚拟机错误、系统崩溃等。 5. 异常的...

    java 异常机制

    throws关键字用在方法签名中,以声明该方法可能会抛出的异常类型。finally块中的代码总是会被执行,无论是否发生异常,它通常用于执行清理工作,比如关闭文件或者释放资源。 异常主要分为两种类型:Error和...

    03-Java异常面试题.docx

    在有效使用异常的情况下,异常能清晰的回答 what, where, why 这三个问题:异常类型回答了“什么”被抛出,异常堆栈跟踪回答了“在哪”抛出,异常信息回答了“为什么”会抛出。 Java 异常架构中,Throwable 是 Java...

    Java异常处理-异常处理的方式2:throws

    3. 对于运行时异常( unchecked exceptions,继承自 `RuntimeException`),可以不声明抛出,因为它们通常表示程序设计错误,通常不期望在调用者那里处理。 综上所述,Java异常处理中的`throws`关键字提供了将异常...

    在Java中异常分析

    - 非`RuntimeException`:编译时检查异常,必须在代码中显式处理或声明抛出。 2. **Error**:通常指出了程序无法处理的问题,例如内存不足等。 #### 二、具体异常详解 ##### 1. `java.lang.NullPointerException...

Global site tag (gtag.js) - Google Analytics