代码改变世界

异常处理

2016-11-06 22:18  backyyan  阅读(619)  评论(0编辑  收藏  举报

异常处理的概念和java异常处理的体系结构

在面向编程语言中,我们可以通过返回值来确定方法是否正常执行。比如在一个c语言编写的程序中,如果方法正确执行则返回1,错误则返回0.在VB或Delphi开发的应用程序中,出现错误时,我们就弹出一个消息框给客户。通过返回值我们并不能获得错误的详细信息。可能因为方法由不同的程序员编写,当同一类错误在不同方法中出现时,返回的结果和错误信息并不一样,所以java语言采取统一的异常处理机制。(异常:运行时发生的可捕获和处理的错误)

在java语言中,任何异常处理的对象都是java.lang.Throwable类或其子类对象。Throwable类是java异常系统体系中的根类,他有两个子类:一个是Error类另一个是Expection类。Error类代表程序运行过程中java内部错误,一旦发生了这种错误,程序员除了告知用户发生的错误并关闭程序的运行之外,没有其他方法,程序员没有办法处理Error类。像“out of memory”就是虚拟机空间不够时会报的错误。Expection是所有异常的父类,任何异常都扩展于Expection类,Expection类相当于一个错误类型。Expection类相当于一个错误类型。Expection类是我们真正关心并尽可能加以处理的。如果要定义一个新的Expection子类。采用异常的好处还在于可以精确的定位到导致程序出错源代码的位置,并获得详细的错误信息。

Expection类分为运行时异常(Runtime  Expection)和非运行时异常。运行时异常就是Runtime  Expection及其子类的异常,像常用的空指针NullPointerExpection,数组溢出IndexOutOfBoundsExpectiont等。非运行时异常是指Runtime  Expection以外的异常,如IOE Expection,SQLExpection等。

常用异常介绍如下:

java.lang.NullPoiterExpection:这个异常大家都肯定经常遇到,异常的解释是“程序上遇到了空指针”简单的说就是调用了未经初始化或者不存在的对象。这个错误经常出现在创建图片,调用数组这些操作中,比如图片未经初始化,或者图片创建时的路径错误等。对数组操作中出现空指针,很多情况下是一些刚开始学习编程的读者常犯的错误,即把数组的初始化和数组元素的初始化混淆起来了,数组的初始化是对数组分配需要的空间,而初始化后的数组,其中的元素并没有实例化,依然是空的,所以还需要对每个元素都进行初始化。

java.lang.ClassNotFoundExpection:这个解释的是“指定的类不存在”。这里主要考虑一下类的名称和路径是否正确即可。

java.lang.ArithmeticExpection:这个异常的解释是“数学运算异常”比如程序中出现了除以零这样的运算就会出现异常。对于这种异常,我们就要好好检查一下自己的程序中涉及数学运算的地方。公式是不是有不妥了。

java.lang.ArrayIndexOutBoundsExpection:这个异常的解释是“数组下标越界”。现在程序中大多数有对数组的操作,因此在调用数组的时候一定要认真检查,看一下自己调用的下标是不是超出数组的范围。一般来说,显式(即直接用常数当下标)调用不太容易出这样的错,但隐式(即用变量表示下标)调用就经常出错了。还有一种情况,程序中定义的数组的长度是通过某些特征方法决定的,不是事先生命的。这个时候最好检查一下数组的length,以免出现这种异常。

java.IllegalArgumentExpection:这个异常的解释是“方法的参数错误”很多J2SE的类库中的方法在一些情况下都会引发这样的错误,比如音量调节方法中的音量参数如果写负数就会出现这种异常;再比如:g.setcolor(int red,int green,int blue)这个方法中的三个值,如果有超过255就会出现这个异常。因此一旦出现这个异常,我们应该首先检查一下方法调用的参数传递是不是出现了错误。

java.IllegalAccessExpection:这个异常的解释是“没有访问权限“。当程序要调用一个类,但当前的方法没有对该类的访问权限就会出现这个异常,对程序中使用lepackage的情况下要注意这个异常。

java.lang.ArrayStoreExpection:试图把与数组类型不相符的值存入数组。

java.lang.ClassCastExpection:试图把一个对象强制转换为不适合的类型。

java.lang.IndexOutOfBoundsExpection:下标越界。

java.util.EmptyStackExpection:试图访问一个空堆栈中的元素。

java.util.NoSuchElementExpection:试图访问一个空间量中的元素。

java.lang.InstantiationExpection:试图使用class的newInstance()方法创建一个对象实例,但指定的对象没有被实例化,因为它是一个接口,抽象类,或数组。

java.lang.InterruptedExpection:当前的线程正在等待,而另一个线程使用了Thread的interrupt()方法中断了当前线程。

java.io.Expection:申请I/O操作没有正常完成。

java.io.EOFExpection:在输入操作正常结束前遇到文件结束符。

java.io.FileNotFoundExpection:在文件系统中没有找到由文件名字符串指定的文件。