# 第三章第一节-java异常
标签(空格分隔): 廖雪峰
---
在计算机程序运行过程中,错误总会出现。
- 用户输入错误
- 读写文件错误
- 网络错误
- 和硬件的连接错误
**java只允许返回一个值**对错误的处理也变得比较困难,常用以下几种方案:
1. 规定返回的错误码在程序中使用`if`和`else`或者`switch`的形式进行判断,这样的缺点让程序看起来很杂乱.
2. 采用`javabean`把需要返回的数据封装起来,在处理逻辑中进行解析.
为提高效率java引入了一种新的**错误处理方式--异常**来处理这种问题.
## 异常
基本概念:
- 异常自身就是class,带有类型信息.
- 异常可以在任何地方抛出.
- 异常只需要在上层捕获,和方法的调用分离.
异常的继承关系:
![异常继承树](http://p0b921qfc.bkt.clouddn.com/18-5-17/71149057.jpg)
## 异常体系:
必须捕获的异常(IDE提示必须抛出)
- `Exception`以及其子类,但是不包括`RuntimeException`及其子类.
- `Checked Exception`(Exception的子类,不包括RuntimeException)
不必须捕获的异常
- `Error`及其子类
- `RuntimeException`及其子类(IDE不提示抛出,运行出错会抛出,见到最多的一类)
解析:
Error是指发生了严重错误,程序对此无能为力,无法自我修复的情况.比如:`OutOfMemoryError`,`NoClassDefFoundError`,`StackOverFlow`等
Exception指的是运行时发生的逻辑错误,第一类估计可能错误的问题`IOException`,`NumberFormatException`...第二类是程序出现的逻辑问题`NullPointException`,`IndexOutOfBoundsException`
对可能抛出的`Checked Exception`的方法调用:
1. 通过使用`try{} catch{} `捕获异常处理.
2. 不捕获异常,但是通过在类名出`throws`声明.
3. **通过`throws`声明需要在调用的上层进行捕获.**
4. main方法是最后捕获异常机会.
## 小节小结
- java使用异常来处理错误,并通过`try{}catsh{}`来捕获异常.
- java异常也是一个class,是继承`Throwable`.
- `Error`是无需捕获的严重无措.
- `Exception`是应该捕获的可处理异常.
- `RuntimeException`无需强制捕获,非`RuntimeException(也就是Checked Exception)`必须强制捕获,或者通过`throws`声明,让上级调用来捕获.
- 前言
- 一:Java快速入门
- 二:Java面向对象编程
- 三:Java异常处理
- 错误处理
- Java的异常
- 捕获异常
- 抛出异常
- 自定义异常
- 断言和日志
- 使用断言
- 使用JDK Logging
- 使用Commons Logging
- 使用Log4j
- 四:Java反射与泛型
- 反射
- Class类
- 访问字段
- 调用方法
- 调用构造方法
- 获取继承关系
- 注解
- 使用注解
- 定义注解
- 处理注解
- 泛型
- 什么是泛型
- 使用泛型
- 编写泛型
- 擦拭法
- extends通配符
- super通配符
- 泛型和反射
- 五:Java集合
- Java集合简介
- Java集合简介
- List
- 使用List
- 编写equals方法
- Map
- Set
- Queue
- Stack
- 最佳实践
- 六:Java IO编程
- 七:Java处理日期和时间
- 八:JUnit单元测试
- 九:Java正则表达式
- 十:Java加密与安全
- 十一:Java多线程编程
- 十二:Maven基础
- 十三:Java网络编程
- 十四:Java操作XML和JSON
- 十五:Java JDBC编程
- 十六:Java函数式编程