1. 什么是异常:
- 错误在我们编写程序的过程中会经常发生,包括编译期间和运行期间的错误。
- 在程序运行过程中,意外发生的情况,背离我们程序本身的意图的表现,都可以理解为异常
2. 异常分类
- Throwable
- Error:它们在应用程序的控制和处理能力之外,而且绝大多数是程序运行时不允许出现的状况
- 虚拟机错误
- 内存溢出
- 线程死锁
- Exception:是程序本身可以处理的异常。异常处理通常指针对这种类型异常的处理。
- Checked Exception(检查异常) RuntimeException
- 空指针异常
- 数组下标越界异常
- 算数异常
- 类型转换异常
- Unchecked Exception(未检查异常)
- IO异常
- SQL异常
3. 异常处理分类
- 抛出异常
- 异常对象
- 异常类型
- 异常出现时的程序状态
- 异常捕获:对于运行时异常、错误或可查异常,Java技术所要求的异常处理方式有所不同
- 对于可查异常必须捕捉或者声明抛出
- 允许忽略不可查的RuntimeException(含子类)和Error(含子类)
- 异常处理
- 通过5个关键字来实现:try catch finally throw throws
- 捕获异常 try-catch-finally
- try块后可接零个或多个catch块,如果没有catch块,则必须跟一个finally块 组合使用
- 声明异常 throws
- 如果一个方法可能会出现异常,但没有能力处理这种异常,可以在方法声明处用throws子句来声明抛出异常
- 当方法抛出异常列表中的异常时,方法将不对这些类型及其子类类型的异常作处理,而抛向调用该方法的方法,由它处理
- 当子类重写父类抛出异常的方法时,声明的异常必须是父类方法所声明异常的同类或子类
- 抛出异常 throw
- 抛出的只能是可抛出类Throwable或者其子类的实例对象
- 当子类重写父类抛出异常的方法时,声明的异常必须是父类方法所声明异常的同类或子类
4. 终止finally执行的方法: System.exit((1)
5. return关键字:finally中不建议加return关键字
6. 自定义异常:就是定义一个类,去继承Throwable类或者它的子类
7. 异常链:将异常发生的原因一个一个串起来,即把底层的异常信息传给上层,这样逐层抛出
- new Exception("", e)
- Exception e1 = new Exception(""); e1.initCause(e);