`

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

分享到:
评论

相关推荐

    【09-异常处理】

    •throws声明抛出只能在方法签名中使用,throws可以声明抛出多个异常类,多个异常类之间以逗 号隔开。throws声明抛出的语法格式如下  –throws ExceptionClass1 , ExceptionClass2... 抛出异常 ...

    Java精华(免费版)

    另外,method3()本身并不会抛出exception,可是它却声明会抛出CheckedException。在向你解释之前,让我们先来看看这个类的main()方法:   public static void main( String[] args )   {   ...

    JSTL详细标签库介绍

    发生异常时,异常周围信息(抛出对象本身类型)-------------异常处理程序<BR><BR>12.5一个异常处理的简单实例:除数为0<BR><BR>需求:使用一个小应用程序,完成两数相除的计算<BR><BR><BR><BR><BR><BR><BR><BR><BR>...

    Spring_Hibernate集成

    1、声明式事务配置 * 配置SessionFactory * 配置事务管理器 ... * 编写业务逻辑方法时,最好将异常一直向上抛出,在表示层(struts)处理 * 关于事务边界的设置,通常设置到业务层,不要添加到Dao上

    基础深化和提高-异常机制

    在try块中放置可能抛出异常的代码,在catch块中处理捕获到的异常,而finally块中的代码总是会被执行,无论是否发生异常。 异常类型: Java中的异常分为已检查异常(checked exception)和未检查异常(unchecked ...

    Spring2.5和Hibernate3集成--学习spring aop ioc

    * 在编写业务逻辑方法时,最好将异常一直往上抛出,由表示层处理(Struts) * spring的事务管理需要添加到业务逻辑上(事务边界的定义),不要回到Dao上 技术提示: 在编写经下代码时: *" propagation=...

    java,c/c++,php,c#安全编码规范

    2.5.3 不允许抛出RuntimeException, Exception,Throwable 22 2.6 多线程编程 23 2.6.1 确保共享变量的可见性 23 2.6.2 确保共享变量的操作是原子的 24 2.6.3 不要调用Thread.run(),不要使用Thread.stop()以终止...

    《Java程序设计案例教程》教学课件07异常处理.pptx

    04 掌握使用throw语句抛出异常,以及使用throws语句声明方法异常。 《Java程序设计案例教程》教学课件07异常处理全文共31页,当前为第2页。 技能目标 能够在MyEclipse IDE中使用try-catch-finally语句块编写程序...

    浅谈RxJava处理业务异常的几种方式

    RuntimeException类及其子类都被称为运行时异常,这种异常的特点是Java编译器不去检查它,也就是说,当程序中可能出现这类异常时,即使没有用try…catch语句捕获它,也没有用throws字句声明抛出它,还是会编译通过。...

    【Java】自定义异常和异常中的方法覆盖注意事项

    自定义异常1.1 定义方式1.2 自定义异常的抛出1.3 自定义异常的捕获2. 异常中的方法覆盖 1. 自定义异常 1.1 定义方式 ① 必须继承自Exception或Exception的子类,常用RuntimeException ② 必须提供无参构造方法; ③...

    JAVA基础知识精华总结 收藏

    JAVA基础知识精华总结 收藏 1、 对象的初始化 ...JAVA中除了RunTimeException 类,其他异常均须捕获或抛出。 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/cppinside/archive/2004/06/28/28246.aspx

    乐优商城.xmind

    使用默认配置,抛出异常之后,事务会自动回滚,数据不会插入到数据库。 setId(null) insert(brand) 新增中间表 mapper @Insert (#{cid},#{bid}) @Param 表示给参数命名,名称就是括号中的内容 name 命名为...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    每章最后都给出了典型的练习题,让读者及时练习,巩固提高,并提供了参考答案 目录 第1篇 Java语言基本语法 第1章 让自己的第一个Java程序跑起来 2 教学视频:19分钟 1.1 想要用Java改变这个世界吗? 2 ...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    每章最后都给出了典型的练习题,让读者及时练习,巩固提高,并提供了参考答案 目录 第1篇 Java语言基本语法 第1章 让自己的第一个Java程序跑起来 2 教学视频:19分钟 1.1 想要用Java改变这个世界吗? 2 ...

    阿里巴巴编码规范 基础技能认证 考题分析(考题+答案).docx

    D .POJO类的serialVersionUID不一致会抛出序列化运行时异常。 多选 9.关于Java的接口描述,下列哪些说法符合《阿里巴巴Java开发手册》:BCD A .在接口类中的方法和属性使用public修饰符。 B .对于Service类,...

Global site tag (gtag.js) - Google Analytics