Board logo

标题: java的异常和断言学习笔记 [打印本页]

作者: qingqing3721    时间: 2011-10-7 10:58     标题: java的异常和断言学习笔记

异常
在java中,一个异常对象总是Throwable子类的实例。
Error类体系描画了Java运转系统中的内部错误以及资源耗尽的情况。
由编程导致的错误,会导致RuntimeException异常。而其他错误缘由导致的异常----例如,由于I/O错误导致的曾经运转正确的顺序出错,都不会导致RuntimeException异常。
从RuntimeException衍生出来的异常包括下面的问题:1〉错误的类型转换;2〉数组越界访问;3〉试图访问一个空指针。
不是从RuntimeException衍生出来的异常包括: 1〉试图从文件尾前面读取数据; 2〉试图打开一个错误格式的URL; 3〉试图用一个字符串来构造一个Class对象,而当该字符串对应的类并不存在;
处理RuntimeException的原则是:假设出现RuntimeException,则一定是你的错误;
不同的阅读器可以处理不同类型的URL,所以,URL格式能否错误依赖于详细的环境,而不只仅是顺序代码;
Java言语标准中将任何Error的子类以及RuntimeException的子类都称为未检查异常,而其他的异常则称为已检查异常;
仅仅在以下4种情况下,才会抛出异常: 1〉调用了一个会抛出"已检查异常"的方法,例如BufferReader类的readLine方法; 2〉顺序运转过程中发生了错误,并且用throw语句抛出一个"已检查异常"; 3〉顺序错误,例如a[-1]=0会抛出一个"未检查异常"如数组下标越界(ArrayIndex--OutOfBoundsException); 4〉Java虚拟机或者是运转时库出现了内部错误;
不需求声明java的内部错误。一个方法必须声明它可能抛出的全部"已检查异常"。假设在本人的子类中覆盖了一个来自父类的方法。特别需求注意的是,假设父类方法根本没有抛出任何"已检查异常",则子类也只能如此;
在Java中,没有throws指示符的方法是不能抛出任何已检查异常的;
对于try/catch代码块,假设方法内的任何代码抛出了一个异常,同时它的类型没有在catch中指定,则方法会立即退出;
应捕捉并且处理那些已知如何处理的异常(用catch),而传递那些不知如何处理的异常(用throws);
对于try/catch/finally代码块,无论能否捕捉异常,elelen胶原蛋白口服液都会执行finally从句中的代码;
虽然Java顺序员必须在finally从句中人工设置代码来回收资源,但由于Java内建有"垃圾搜集"机制,所以只有极多数的资源才要求人工停止回收;
actionPerformed方法不能抛出任何已检查异常;
使用异常机制的一些技巧:
1〉异常控制不能替代复杂的测试,和执行复杂的测试相比,捕捉异常所需的时间大大超越前者,所以,只有在异常情况下才使用异常;
2〉不要过火细化异常;
3〉不要压制异常:可以使用如下格式: try { //代码 } catch (Exception e) { //空 }
4〉不要羞于传递异常:对于某些异常(如调用FileInputStream构造器或者readLine方法发生的异常),传递它比捕捉它更好。让高层的方法来通知用户发生了错误或者保持执行不成功的命令更适宜。




欢迎光临 编程开发论坛 (http://bbs.lihuasoft.net/) Powered by Discuz! 6.0.0