Checked异常和Unchecked异常
1,异常分类
从异常处理机制的角度可以分为两类,Unchecked Exceptions和Checked Exceptions。Unchecked Exceptions指的是被程序员check的异常,Checked Exceptions指的是被编译器check的异常。如下图:
Throwable下面有两个子类,分别为Error和Exception,其中所有的Error类和Exception类中的RuntimeException类都属于Unchecked异常,其余都属于Checked异常。
2,处理机制
Checked Exceptions可能会发生的地方,编译器会强制要求你要么处理这个异常(try catch块进行处理),要么在这个方法的头部声明这个方法可能会抛出一个异常,对调用这个方法的方法做一个警告,要求调用者来处理这个异常(throws声明)。Unchecked Exceptions可能会发生的地方,编译器无法预见,因此不要求做任何处理。一般来说,Checked Exceptions常常是可以捕获捕获并处理的,往往由与客户端的不正确调用引起,捕获异常并处理可以给用户提供一次改正的机会,提高程序的健壮性。例如:用户指定打开文件路径的文件并不存在,因此可以捕获这个异常,做一个提示,并让用户可以重新选择路径。Unchecked Exceptions一般捕获后没有什么价值的,其包含的Error属于系统的内部错误,是由于设备错误,物理限制,内存不足,JVM发生内部错误,不兼容等等原因导致的,因此捕获后没有什么处理价值。另一种RuntimeException则是由于程序员本身代码有错误,发生除零错误,空指针异常,数组越界等等,这种纯粹属于程序员写代码时的失误引起,需要改变程序,因此捕获的价值很低,重写代码找出bug即可。
3,处理实例
Unchecked Exceptions:
在函数A中抛出Unchecked异常,不强制声明或捕获。
public class son {public static void main(String[] args) {C();}public static void A(){throw new RuntimeException();}public static void B() {A();}public static void C() {B();}
}
你非要捕获他也可以。。。一般用处不大。
public class son {public static void main(String[] args) {try {C();} catch (RuntimeException e) {// TODO Auto-generated catch blocke.printStackTrace();System.out.println("捕捉到Unchecked Exception");}}public static void A() throws RuntimeException{throw new RuntimeException();}public static void B() throws RuntimeException {A();}public static void C() throws RuntimeException {B();}
}
Checked Exceptions
在A中抛出Checked异常,需要声明或者捕获。
public class son {public static void main(String[] args) throws IOException {C();}public static void A() throws IOException{throw new IOException();}public static void B() throws IOException {A();}public static void C() throws IOException {B();}
}
public class son {public static void main(String[] args) {try {C();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();System.out.println("捕捉到啦");}}public static void A() throws IOException{throw new IOException();}public static void B() throws IOException {A();}public static void C() throws IOException {B();}
}
Checked异常和Unchecked异常相关推荐
- Java异常:选择Checked Exception还是Unchecked Exception?
Java包含两种异常:checked异常和unchecked异常.C#只有unchecked异常.checked和unchecked异常之间的区别是: Checked异常必须被显式地捕获或者传递,如B ...
- [转载] Java异常:选择Checked Exception还是Unchecked Exception?
参考链接: Java中的已检查与未检查异常| checked或unchecked异常 Java包含两种异常:checked异常和unchecked异常.C#只有unchecked异常.checked和 ...
- Checked exception及Unchecked exception对比
一.异常分类 从异常处理机制的角度可以分为两类,Unchecked Exceptions和Checked Exceptions.Check即编译器检查程序是否已经抛出或处理了可能的异常.Uncheck ...
- 检查型异常(Checked Exception)与非检查型异常(Unchecked Exception)
检查型异常(Checked Exception)与非检查型异常(Unchecked Exception) 参考文章: (1)检查型异常(Checked Exception)与非检查型异常(Unchec ...
- 基础知识《十》unchecked异常和checked异常
Exception和继承自Exception的RuntimeException有什么区别呢? Java compiler要求所有的Exception 要么被catch,要么被throw,除非这是一个 ...
- unchecked异常_为什么要在Java中使用Unchecked异常而不是Checked异常
unchecked异常 关于检查与未检查的异常的争论可以追溯到过去. 有人说这是Java包含的最佳功能之一. 其他人则说这是他们最大的错误之一[ 1 ]. 辩论似乎结束了. 在这篇文章中,我将尝试包含 ...
- 为什么要在Java中使用Unchecked异常而不是Checked异常
关于检查与未检查的异常的争论可以追溯到过去. 有人说这是Java包含的最佳功能之一. 其他人则说这是他们最大的错误之一[ 1 ]. 辩论似乎结束了. 在这篇文章中,我将尝试包含指向该主题的文章和书籍的 ...
- Checked异常和Runtime异常
Checked异常和Runtime异常 - 爱你一万年123 - 博客园 一 Checked异常和Runtime异常介绍 Java的异常被分为两大类:Checked异常和Runtime异常(运行时异常 ...
- 通俗理解checked Exception和unchecked Exception
首先放一张Java异常层次结构图: 错误(Error)和异常(Exception)是不同的. Error(错误):是程序无法处理的错误,表示运行应用程序中较严重问题.大多数错误与代码编写者执行的操作无 ...
最新文章
- Windows注册文件类型信息的学习心得
- Linux常用命令行
- Enterprise Library 4.1 Application Settings 快速使用图文笔记
- Synchronize死锁
- 详细解读Jquery各Ajax函数:$.get(),$.post(),$.ajax(),$.getJSON()
- mysql数据加百分号_使用MySQL SELECT语句时,在每个值的末尾添加一个百分号(%)...
- icmp时间戳请求和应答程序实现_ICMP报文详解之ping实现
- 各种排序总结(三)堆排序
- 递归算法经典实例小结(C#实现)
- 求正方形和长方形的个数
- badboy录制脚本错误问题解决
- 使用python解析Wordpress导出的xml文件
- matlab不能定位,matlab定位问题!
- TryHackMe-Gatekeeper
- Android安全检测之加固的坑
- Sikuli异常RunTimeINIT: *** terminating: libs to export not found on above classpath: /sikulixlibs/wind
- Shell中显示彩色二维码
- Zynq-Linux移植学习笔记之24-VPVN温度监测
- 从来只留一场梦 一场春梦成白头 上软疑似解体 忆仙剑而作
- U盘装Win7系统,找不到任何设备驱动程序