Java知识点总结(JavaIO-异常)
@(Java知识点总结)[Java, Java异常]
[toc]
为什么需要异常机制
不是所有的问题都能在编译时被发现,有些问题在程序运行时才会暴露出来
异常机制是面向对象的处理程序在运行时发生的状况的手段
使用异常机制不会打乱原有业务逻辑的
- 用try块把可能出异常的代码保护起来
- 用一个或多个catch块捕获发生的异常
Throwable
可以用throw关键字抛出Throwable及其子类对象
相关方法
- getCause()
- getMessage()
- printStackTrace()
- fillInStackTrace()
两个子类
-
Error
- AssertionError
- VirtualMachineError
- StackOverflowError
- OutOfMemoryError
- AWTError
-
Exception
- 运行时异常(非受检异常) - RuntimeException
- 受检异常
异常的使用
声明异常
- 修饰符 返回类型 方法名(参数列表) throws 异常1,异常2, ...
- 声明的异常通常是受检查的异常
- 声明异常是为了让方法的调用者处理异常
- 声明异常时可以"无病呻吟"
- 子类重写的方法不能比父类被重写的方法声明更多的异常
捕获异常
-
try块
- 将可能出现异常的代码保护起来
-
在Java 7以前try后面必须要有catch块或者finally块,不能单独使用
-
从Java 7开始可以使用TWR语法(try-with-resources)
- try (需要自动释放的资源) { ... }
-
-
catch块
* 如果try块中的代码发生了异常那么就由catch块捕获异常并执行相应的处理 * 如果try块中的代码没有发生异常那么catch块不会执行 * 一个try块后面可以跟上一个或多个catch块用于处理不同类型的异常 * 如果多个catch块捕获的异常有父子关系那么要将捕获子类异常的catch块写在前面 * 异常的捕获遵循里氏替换原则 * catch块中捕获到的异常对象可以再次使用throw抛出
-
finally块
* 总是执行代码块,只要JVM没有关闭不管程序正常还是异常都会执行 * 最适合释放打开的外部资源
抛出异常(throw异常对象)
自定义异常
继承RuntimeException
继承Exception及其他子类
设计和使用原则
不用异常机制处理正常业务逻辑
对可恢复的情况使用受检异常,对编程错误使用运行时异常
优先使用标准的异常类型
抛出异常的方法要有对应的文档注释
出现异常的方法要使对象保持在被调用之前的状态
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。