Java学习---10

来源:互联网 发布:2015休闲食品销售数据 编辑:程序博客网 时间:2024/06/15 22:56

异常分类
在Java程序设计语言中,异常对象都是派生于Throwablke类的一个实例。
所有的异常都是由Throwable继承而来,但在下一层立即分解为两个分支:Error和Exception。
Error类层次结构描述了Java运行时系统的内部错误和资源耗尽错误。应用程序不应该抛出这种类型的对象。
Exception层次结构分解为两个分支:一个分支派生于RuntimeException;另一个分支包含其他异常。划分两个分支的规则是:由程序错误导致的异常属于RuntimeException;而程序本身没有问题,但由于像I/O错误这类问题导致的异常属于其他异常。

如果出现RuntimeException异常,那么就一定是你的问题

应该通过检测数组下标是否越界来避免ArrayIndexOutOfBoundsException异常;应该通过使用变量之前检测是否为null来杜绝NullPointerException异常的发生。
Java语言规范将派生于Error类或RuntimeException类的所有异常称为非受查异常,所有其他的异常称为受查异常。
编译器将核查是否为所有的受查异常提供了异常处理器。
声明受查异常
一个方法不仅需要告诉编译器将要返回什么值,还要告诉编译器有可能发生什么错误。
方法应该在其首部声明所有可能抛出的异常。这样可以从首部反映出这个方可能抛出哪类受查异常。
遇到下面4种情况时应该抛出异常:
1 调用一个抛出受查异常的方法
2 程序运行过程中发现错误,并且利用throw语句抛出一个受查异常
3 程序出现错误
4 Java虚拟机和运行时库出现的内部错误
如果一个方法有可能抛出多个受查异常类型,那么就必须在方法的首部列出所有的异常类。每个异常类之间用逗号隔开。
一个方法必须声明所有可能抛出的受查异常,而非受查异常要么不可控制(Error),要么就应该避免发生(RuntimeException)。如果方法没有声明所有可能发生的受查异常,编辑器就会发出一个错误信息。
如果在子类中覆盖了超类的一个方法,子类方法中声明的受查异常不能比超类方法中声明的异常更通用(也就是说,子类方法中可以抛出更特定的异常,或者根本不抛出任何异常)。如果超类方法没有抛出任何受查异常,子类也不能抛出任何受查异常。
如果类中的一个方法声明将会抛出一个异常,而这个异常是某个特定类的实例时,则这个方法就有可能抛出一个这个类的异常,或者这个类的任意一个子类的异常。
抛出异常throws
捕获异常
设置try/catch语句块。最简单的try语句块如下所示:
try
{
code
more code
more code
}
catch(ExceptionType e)
{
handler for this type
}

捕获多个异常
在一个try语句块中可以捕获多个异常类型,并对不同类型的异常做出不同的处理
异常对象可能包含与异常本身有关的信息。要想获得对象的更多信息,可以试着使用
e.getMessage()得到详细的错误信息
或者使用e.getClass().getName()得到异常对象的实际类型
同一个catch子句中可以捕获多个异常类型
捕获多个异常时,异常变量隐含为final变量
再次抛出异常
在catch子句中可以抛出一个异常,这样做的目的是改变异常的类型

finally子句
不管是否有异常被捕获,finally子句中的代码都被执行

原创粉丝点击