Java中实现异常处理的基础知识

Java中实现异常处理的基础知识

    异常 (Exception):发生于程序执行期间,表明出现了一个非法的运行状况。许多JDK中的方法在检测到非法情况时,都会抛出一个异常对象。

例如:数组越界和被0除。

 

源代码示例:

package yanzheng;

//关于异常  2015.11.11

import javax.swing.*;

public class AboutException {

   public static void main(String[] args

   {

      int i=1, j=0, k;

   //   k=i/j;    //此句会抛出异常,显示被0除

try

{

k = i/j;    // Causes division-by-zero exception

//throw new Exception("Hello.Exception!");

}

catch ( ArithmeticException e)  //捕获类型为算术异常,捕获对象为e,算数异常就比如被0除这种情况

{

System.out.println("被0除.  "e.getMessage());  

//e.getMessage()这句是包中的一个类,去掉也行

}

/*Exception为所有的异常类型.使用catch语句,只能捕获Exception类及其子类的对象。

 因此,一个捕获Exception对象的catch语句块可以捕获所有“可捕获”的异常。*/

catch (Exception e)  

{

if (e instanceof ArithmeticException)  

//instanceof为如果e可转换为ArithmeticException这种类型

System.out.println("被0除");

else

{  

System.out.println(e.getMessage());

}

}

finally  //finally语句会被执行

     {

      JOptionPane.showConfirmDialog(null,"OK");

     }

  }

}

 

 

异常处理的目的是依据实际情况提供不同的错误应对策略与手段,使程序更稳定,更安全。

异常处理的主要用途是提供准确的错误消息,解释失败的原因、位置和错误类型等,同时提供一定的恢复能力,尽可能地保证数据完整性不被破坏,并让程序能继续运行。

Java中的异常捕获语句

Java中实现异常处理的基础知识

    Java 中所有可捕获的异常都派生自 Exception 类。

使用Java异常处理机制

*把可能会发生错误的代码放进try语句块中。

*当程序检测到出现了一个错误时会抛出一个异常对象。异常处理代码会捕获并处理这个错误。catch语句块中的代码用于处理错误。

*当异常发生时,程序控制流程由try语句块跳转到catch语句块。

*不管是否有异常发生,finally语句块中的语句始终保证被执行。

*如果没有提供合适的异常处理代码,JVM将会结束掉整个应用程序。

JDK中与异常相关的类

Java中实现异常处理的基础知识

Java中的异常分类

Throwable类有两个直接子类:

Exception:出现的问题是可以被捕获的;

Error:系统错误,通常由JVM处理。

可捕获的异常又可以分为两类:

(1)check异常:直接派生自Exception的异常类,必须被捕获或再次声明抛出

(2)runtime异常:派生自RuntimeException的异常类。使用throw语句可以随时抛出这种异常对象:

throw new ArithmeticException(…);

异常的“多态”特性

*可以有多个catch语句块,每个代码块捕获一种异常。在某个try块后有两个不同的catch块捕获两个相同类型的异常是语法错误。

*使用catch语句,只能捕获Exception类及其子类的对象。因此,一个捕获Exception对象的catch语句块可以捕获所有“可捕获”的异常。

*将catch(Exception e)放在别的catch块前面会使这些catch块都不执行,因此Java不会编译这个程序。

“finally”的功用

*资源泄露:当一个资源不再被某应用程序使用,但此程序并未向系统声明不再使用此资源时发生这种情况

*finally语句块主要用于解决资源泄露问题,它位于catch语句块之后,JVM保证它们一定执行。

*注意:finally语句块中也可能发生异常,如果这种情况发生,先前的异常被放弃。