Java中抛出RuntimeException为什么不用显示声明
2016-02-17 16:57
531 查看
我们知道Java的异常类型体系结构如下:
Throwable
/ \
Exception Error
/ \
RuntimeException
我们可以看到RuntimeException的继承体系是Exception子类。而Exception还有其它类型的异常,我们统一称为非Runtime异常。RuntimeException的特点是非受检异常,也就是Java系统中允许可以不被catch,在运行时抛出。而其它定非运行时异常如果抛出的话必须显示的catch,否则编译不过。
那么为什么RuntimeException可以允许不被catch呢?
首先我们可以看看RuntimeException都有哪些子类型:
1 NullPointerException,这个不用多说了。
2 NumberFormatException,字符串转化成数字时。
3 ArrayIndexOutOfBoundsException, 数组越界时。
4 StringIndexOutOfBoundsException, 字符串越界时。
5 ClassCastException,类型转换时。
6 UnsupportedOperationException,该操作不支持,一般子类不实现父类的某些方法时。
7 ArithmeticException,零作为除数等。
8 IllegalArgumentException,表明传递了一个不合法或不正确的参数
可以看到大多数错误并不是由于程序本身有问题,而是运行时输入在某些case下导致的,有更多的不确定性。而且Java开始的时候并没有异常处理机制,所以从兼容性到实现代价来讲就设计成这个样子了。
原文:http://blog.csdn.net/hongchangfirst/article/details/50681244
作者:hongchangfirst
hongchangfirst的主页:http://blog.csdn.net/hongchangfirst
Throwable
/ \
Exception Error
/ \
RuntimeException
我们可以看到RuntimeException的继承体系是Exception子类。而Exception还有其它类型的异常,我们统一称为非Runtime异常。RuntimeException的特点是非受检异常,也就是Java系统中允许可以不被catch,在运行时抛出。而其它定非运行时异常如果抛出的话必须显示的catch,否则编译不过。
那么为什么RuntimeException可以允许不被catch呢?
首先我们可以看看RuntimeException都有哪些子类型:
1 NullPointerException,这个不用多说了。
2 NumberFormatException,字符串转化成数字时。
3 ArrayIndexOutOfBoundsException, 数组越界时。
4 StringIndexOutOfBoundsException, 字符串越界时。
5 ClassCastException,类型转换时。
6 UnsupportedOperationException,该操作不支持,一般子类不实现父类的某些方法时。
7 ArithmeticException,零作为除数等。
8 IllegalArgumentException,表明传递了一个不合法或不正确的参数
可以看到大多数错误并不是由于程序本身有问题,而是运行时输入在某些case下导致的,有更多的不确定性。而且Java开始的时候并没有异常处理机制,所以从兼容性到实现代价来讲就设计成这个样子了。
原文:http://blog.csdn.net/hongchangfirst/article/details/50681244
作者:hongchangfirst
hongchangfirst的主页:http://blog.csdn.net/hongchangfirst
相关文章推荐
- java String.getBytes()编码问题——String.getBytes(charset)
- eclipse 查看本类被调用列表
- Eclipse查看到某个类的完整继承关系
- 使用 spring框架 获取 session
- STS 新建一个spring-boot rest 项目
- eclipse报jvm terminated.exitcode=2异常
- Android开发常用快捷键(eclipse)
- springMVC的一些工具类
- Java NIO相关操作
- java获取服务器一些信息的方法
- Java经典问题算法大全
- 【spring集锦】spring注入
- jdk安装提示对象已存在
- Java线程中run和start方法的区别
- Java 如何有效地避免OOM:善于利用软引用和弱引用
- 线程基础:JDK1.5+(10)——线程新特性(下)
- Java JVM:编译加载与自定义类加载器
- struts2 使用dmi
- JavaScipt中栈的实现方法
- InfoQ - 促进软件开发领域知识与创新的传播 搜索关键词 登录 En |中文 |日本 |Fr |Br 966,690 一月 独立访问用户 语言 & 开发 Java Clojure Scala