- 讨论Java语言处理错误的方式:异常Exception
7.1 处理错误
- 如果由于出现错误而是的某些操作没有完成,程序应该;
- 返回到一张安全状态,并能够让用户执行一些其他的命令
- 允许用户保存所有操作的结果,并以妥善的方式终止程序
- 异常处理的任务就是将控制权从错误产生的地方转移给能够处理的错误处理器
- 在java中,如果某个方法不能够采用正常的途径完整它的任务,就可以通过另外一个途径退出方法。在这种情况下,方法并不能够返回任何值,而是抛出一个封装了错误信息的对象
- 在Java程序设计语言中,异常对象都是派生于Trowable类得到一个示例,如果java中内置的异常类不能够满足需求,用户可以创建自己的异常类
- 所有异常都是由trowable类继承而来,但在下一层立即分解为两个分支:Error和Exception
- Error类层次结构描述了java运行时系统的内部错误和资源耗尽错误。应用程序不应该抛出这种类型的对象。如果出现类这样的内部错误,除了报告给用户,并尽力使程序安全的终止外,再也无能无力类,这种情况很少遇见。
- 在设计Java程序时,需要关注Exception层次结构,这个层次结构又分解为两个分支:一个分支派生于RuntimeException;另一个包含其他异常。划分两个分支的规则是:由程序错误导致的异常属于RuntionException;而程序本身没有问题,但像I/O错误这类问题导致的异常属于其他异常
- 派生于RuntimeException的异常包含下面几种情况:
- 错误的类型转换
- 数组访问越界
- 访问null指针
- 不是派生与RuntimeException的异常包括:
- 试图在文件尾部苟免读取数据
- 试图打开一个不存在的文件
- 试图根据给定的字符串查找Class对象,而这个字符串表示的类并不存在
- “如果出现RuntimeEeception异常,就一定是你的问题”
- Java语言规范将派生于Error类或RuntimeException类的所有异常成为非受查异常,所有其他的异常成为受查异常。这是两个很有用的术语。
- 方法应该在首部声明所有可能抛出的异常。这样可以从首部反映出这个方法可能抛出哪类受查异常。(thows)
- 如果一个方法可能抛出多个受查异常类型,那么就必须在方法的首部李处所有的异常类。每个异常类之间用逗号隔开。但是,不需要声明Java的内部错误,即从Error继承的异常。任何程序都具有抛出哪些异常的潜能,而我们对其没有任何控制能力。
- 我们必须catch的是受查异常(IOException),像数组越界等非受查异常,不需要捕获。总之,一个方法必须声明所有可能抛出的受查异常。如果方法没有申明所有kennel发生的受查异常,编译器就回发出一个错误信息。
- 子类方法中可以抛出更特定的异常,或则根本不抛出任何异常。如果超类没有抛出任何异常,子类也不能抛出任何受查异常。
- 关键词:
- throws:列出这个方法可能抛出的异常
- throw:已经产生类异常,需要抛出。一般用于自定义异常
- try——catch:如果有,捕获异常
- 在Java中,只能抛出Trowable子类的对象
7.2 捕获异常
- 如果某个异常发生的时候没有在任何地方捕获,程序就回终止,并在控制台打印出异常信息。要想捕获一个异常,必须设置try/catch语句块
- 如果调用了一个抛出受查异常的方法,就必须对它进行处理或者继续传递
- 不允许在子类的throws说明符中出现超过超类方法说列出的异常范围
7.3 只用异常机制的技巧
- 异常处理不能代替简单的测试
- 不要过分的细化异常
- 利用异常层次结构
- 不要压制异常
- 在检测错误时,“苟刻”要比放任更好
- 不要羞于传递异常
7.4 断言
- 断言也是一种Java错误处理机制
7.5~ 日志
没看