Welcome 微信登录

首页 / 软件开发 / JAVA / java的异常和断言学习笔记

java的异常和断言学习笔记2011-10-16 cn-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代码块,无论是否捕获异常,都会执行finally从句中的代码;

虽然Java程序员必须在finally从句中人工设置代码来回收资源,但由于Java内建有"垃圾收集"机制, 所以只有极少数的资源才要求人工进行回收;

actionPerformed方法不能抛出任何已检查异常;