以下是我对于Java中出现的异常的一些见解,见代表个人所想。
异常,就是阻止当前方法或作用域继续执行的问题。在Java中出现了异常,也就说明你的程序存在了问题,导致程序无法继续运行下去,从而提醒我们需要注意并改正。
例如除数为0的情况:它会抛出以下异常:
异常提示的目的就是告诉你出现了哪种异常,从而使我们能够更好的处理这些问题,并且捕获异常能够增加程序的稳定性。异常处理的主要用途是提供准确的错误消息,解释失败的原因、位置和错误类型等,同时提供一定的恢复能力,尽可能地保证数据完整性不被破坏,并让程序能继续运行。
其一般形式为:
Try{
//可能发生运行错误的代码;
}
catch(异常类型 异常对象引用){
//用于处理异常的代码
}
finally{
//用于“善后” 的代码
}
把可能会发生错误的代码放进try语句块中。 当程序检测到出现了一个错误时会抛出一个异常对象。异常处理代码会捕获并处理这个错误。 catch语句块中的代码用于处理错误。 当异常发生时,程序控制流程由try语句块跳转到catch语句块。 不管是否有异常发生,finally语句块中的语句始终保证被执行。 如果没有提供合适的异常处理代码,JVM将会结束掉整个应用程序。
Java 中所有可捕获的异常都派生自 Exception 类。有许多非常常见的会出现异常的问题需要我们注意:
1. Java.lang.NullPointerException
这个的意思是遇到空指针异常,简单地说就是调用了未经初始化的对象或者是不存在的对象,比如说调用图片时,创建数组时,必须对其初始化。
2. java.lang.ClassNotFoundException 这个异常是很多原本在JB等开发环境中开发的程序员,把JB下的程序包放在WTk下编译经常出现的问题,异常的解释是"指定的类不存在",
这里主要考虑一下类的名称和路径是否正确即可,假如是在JB下做的程序包,一般都是默认加上Package的,所以转到WTK下后要注重把Package的路径加上。
3. java.lang.ArithmeticException
这个是数学运算异常,比如说上边举到的例子,被除的数为0,这个是不应该的。
4. java.lang.ArrayIndexOutOfBoundsException
这个是数组下标越界异常,相信大家也很经常遇到这种情况,所以这就需要的大家的细心了。
5. java.lang.IllegalArgumentException
这个异常的解释是"方法的参数错误",很多J2ME的类库中的方法在一些情况下都会引发这样的错误,比如音量调节方法中的音量参数假如写成负数就会出现这个异常,
再比如g.setColor(int red,int green,int blue)这个方法中的三个值,假如有超过255的也会出现这个异常,因此一旦发现这个异常,我们要做的就是赶紧去检查一下
方法调用中的参数传递是不是出现了错误。
6. java.lang.IllegalAccessException 这个异常的解释是"没有访问权限",当应用程序要调用一个类,但当前的方法即没有对该类的访问权限便会出现这个异常。对程序中用了Package的情况下要注重这个
异常。
以上是一些我们经常遇到的异常问题,虽然有一些我们们还没有遇见过,但是当以后遇到的时候我们不妨在这些地方添加try catch finally来保证我们程序的稳定性。
异常类分为两大部分:Errors和Exception两个类,其中前者出现的问题是系统的错误,通常由JVM处理,而后者出现的异常都是可以捕获的。Exception(可捕获异常类)
又分为两类:
(1)Check异常类:其是直接派生自Exception的异常类,必须被捕获或者再次声明抛出。
(2)Runtime一场:其是派生自RuntimeException的异常类,使用throw语句可以随时抛出这种异常对象。
以下是他们的关系图:
finally的功能:
资源泄露:当一个资源不再被某应用程序使用,但此程序并未向系统声明不再使用此资源时发生这种情况 finally语句块主要用于解决资源泄露问题,它位于catch语句块之后,JVM保证它们一定执行。 注意:finally语句块中也可能发生异常,如果这种情况发生,先前的异常被放弃。
以上是结合了自己的理解和一些资料得来的总结,仅代表个人见解。