Java笔记之异常机制
来源:互联网 发布:techrules 知乎 编辑:程序博客网 时间:2024/06/05 09:16
1.处理异常
处理异常的时候,应该保证两点:返回到一种安全状态,并能让用户执行一些其他的命令;允许用户保存所有的操作结果,并以适当的方式终止程序。
以下问题需要特别关注:用户输入错误、设备错误、物理限制、代码错误等。
1.1异常分类
异常的层次结构如下图:
Error类描述了Java运行时系统的内部错误和资源耗尽错误。应用程序不应该抛出这种类型的对象,如果出了这样的内部错误,再也无能为力了。
在处理异常的时候,需要关注Exception层次结构。该层次分为两支:一支派生于RuntimeException,另一支包含其他异常。由程序错误导致的属于RuntimeException,而程序本身没有问题,但由于I/O错误这类问题导致的属于其他异常。
RuntimeException包含:
1)错误的类型转换
2)数组访问越界
3)访问空指针
RuntimeException不包含:
1)试图在文件尾部后面读取数据
2)视图打开错误格式的URL
3)试图根据给定字符串查找Class,但这个字符串不存在
如果出现RuntimeException异常,那就一定是你的问题。
1.2声明已检查的异常
如果遇到异常,方法需要在头部声明所有可能抛出的异常,格式如下:
public FileInputStream(String name) throws FileNotFoundException必须使用throws的情况:
1)调用一个抛出已检查异常的方法
2)程序中使用throw抛出一个异常
3)程序出现错误
4)Java虚拟机内部异常
1.3如何抛出异常
throw new EOFException;或者EOFException e=new EOFException();throw e;
1.4创建异常类
在程序中可能会遇到标准异常类没有充分描述清楚的问题,需要创建自己的异常类。例如:
class FileFormatException extends IOException{public FileFormatException()...}
2.捕获异常
有些代码的异常不需理睬,有些必须要捕获。如果某个异常发生时没有被捕获,就会终止执行。要捕获异常需要采用try/catch语句块。
try{...}catch(ExceptionType e){...}如果在try语句块中抛出了一个在catch中说明的异常类,那么
1)程序将跳过try语句块的其余代码
2)程序执行catch语句中的代码。
如果没有抛出异常,那么就会跳过catch语句块。
2.1捕获多个异常
可以按照下列方式捕获多个异常类型,对不同的类型进行处理。
try{...}catch(MalformedURLException e1){...}catch(UnknowHostException e2){...}catch(IOException e3){...}
2.2Finally子句
try{...}catch(ExceptionType e){...}finally{...//用于资源回收}有三种情况下会执行finally语句:
1)代码没有抛出异常
2)代码抛出异常并在catch中捕获
3)代码抛出异常但是没有在catch中被捕获
3.使用异常机制的建议
3.1异常处理不能代替简单的测试
3.2不要过分的细化异常
3.3利用异常层次结构,将一种异常转换为另一种更加适合的异常
3.4不要压制异常
- Java笔记之异常机制
- java笔记之异常机制
- [学习笔记]Java异常机制
- [学习笔记]Java异常机制
- Java SE之异常机制
- JAVA 基础之 异常机制
- java之异常处理机制
- java之异常处理机制
- java笔记之异常
- java笔记之异常
- Java笔记之异常
- java笔记--java异常处理机制
- java学习笔记-java异常处理机制
- Java基础之Java异常处理机制
- java 异常以及回收机制 工作笔记
- java异常机制(学习笔记)
- 异常机制—学习笔记—java中异常处理
- Java笔记之常见异常
- 多态的趣味例子
- 黑马程序员 java入门:函数的重载
- 教你如何成为数据科学家(七)
- linux-2.6.32在mini2440开发板上移植 ---LED 驱动程序移植
- Kconfig,Makefile 和 .config
- Java笔记之异常机制
- Spring中事务的类型
- APP-V5.0的Sequencer过程
- linux-2.6.32在mini2440开发板上移植 ---按键驱动程序移植
- linux platform设备驱动简介及实例
- js xml字符串处理样例
- list和vector有什么区别?
- mybatis代码生成器避免生成Example类的配置参数
- UI控件详解06-UITextField 详解