Java异常处理概述

    |     2015年4月18日   |   Java异常处理   |     0 条评论   |    1513

一程序的错误可分三类:编译错误、逻辑错误和运行时错误。
1)编译错误是由于没有遵循Java语言的语法规则而产生的,这种错误要在编译阶段排除,否则程序不可能运行。

2)逻辑错误是指程序编译正常,也能运行,但结果不是人们所期待的。

3)运行时错误是指程序运行过程中出现了一个不可能执行的操作,就会出现运行时错误,运行时错误有时也可以由逻辑错误引起。

异常处理的主要目的是即使在程序运行时发生了错误,也要保证程序能正常结束,避免由于错误而使正在运行的程序中途停止。
异常处理机制是JAVA语言的重要特征之一。通过异常处理机制可防止程序执行期间因出现错误而造成不可预料的结果。

异常是程序执行期间发生的各种意外或错误。比如说:
① 用户输入出错
② 所需文件找不到
③ 运行时磁盘空间不够
④ 内存不够
⑤ 算术运算错 (数的溢出,被零除…)
⑥ 数组下标越界
二、在Java程序运行过程,产生的异常通常有三种类型:

1.是JAVA虚拟机由于某些内部错误Error产生的异常,这类异常不在用户程序的控制之内,也不需要用户处理这类异常;

2.是标准异常类,由java系统预先定义好的。这类异常是由程序代码中的错误而产生的,如:以零为除数的除法,访问数组下标范围以外的数组元素,访问空对象内的信息,这是需要用户程序处理的异常。

3.是根据需要在用户程序中自定义的一些异常类。

 

下面代码运行时会出现数组越界异常.

//java直接处理运行时异常
class TestSystemException{
   public static void main(String[ ] args){
      int num[ ]=new int[2];
      for(int i=1;i<3;i++){
            num[i]=i;
            System.out.println(“num[”+i+”]=”+i);
     }
 }
}

三、异常的处理机制

Java对异常的处理涉及两方面的内容:
一是抛出(throw)异常
二是捕捉(catch)异常
如果程序在运行过程中出现了运行错误,并且产生的异常与系统中预定义某个异常类相对应,系统就自动产生一个该异常类的对象,这个过程称为抛出(throw)异常。当有异常对象抛出时,将在程序中寻找处理这个异常的代码,如果找到处理代码,则把异常对象交给该段代码进行处理,这个过程称为捕捉(catch)异常。如果程序中没有给出处理异常的代码,则把异常交给Java运行系统默认的异常处理代码进行处理。默认的处理方式是:首先显示描述异常信息的字符串,然后终止程序的运行。
四、异常的抛出(throw)

抛出异常有两种方式:由系统自动抛出和利用抛出语句抛出。
1 由系统自动抛出异常
在程序运行过程中,如果出现了可被Java运行系统识别的错误,系统会自动产生与该错误相对应的异常类的对象,即自动抛出。
2 人为异常抛出
两种方式:
① 在方法头写出需要抛出的异常(利用throws语句)

class Throws_Exp{
   public static void main(String[] args) throws ArithmeticException,ArrayIndexOutOfBoundsException
      {
        int a=4,b=0,c[]={1,2,3,4,5};
          System.out.println(a/b);
          System.out.println(c[a+1]);
          System.out.println(“end”);
  }
}

② 在方法体内抛出异常(利用throw语句)

class Throw_Exp3 {
  public static void main(String[] args) {
    int a=5,b=0,c[]={1,2,3,4,5};
    System.out.println(“Before  throw”);
     if(b==0)
          throw (new  ArithmeticException ());
    System.out.println(a/b);
     if(a>4)
          throw (new ArrayIndexOutOfBoundsException());
     System.out.println(a/b);
  }
}

五、捕捉异常

try – catch语句块格式:

try
 {
   //在此区域内或能发生异常;
 }catch(异常类1   e1)
  { //处理异常1; }
   …
  catch(异常类n   en)
 { //处理异常n; }
 [finally
   { //不论异常是否发生,都要执行的部分; }
 ]

六、用户自定义的异常类

尽管Java提供了很多异常类,但用户还是可以根据需要定义自己的异常类,即创建自定义异常类。
说明:
(1)用户自定义的异常类必须是Throwable类或Exception类的子类。
(2)自定义的异常类,一般只要声明两个构造方法,一个是不用参数的,另一个以字符串为参数。作为构造方法参数的字符串应当反映异常的信息。
(3)自定义异常类格式
class MyException extends Exception{

}
注:用户定义的异常同样要用try–catch捕获,但必须由用户自己抛出 throw new MyException().

class Exception_exp{
         public static void main(String[] args){
             try {
              System.out.println("2+3="+add(2,3));
                    System.out.println("-8+10="+add(-8,10));
             }catch (Exception e){
             System.out.println("Exception is "+e);
         }
       }
       public static int add(int n,int m) throws UserException {
               if (n<0|| m<0) throw new UserException();
              return n+m;
       }
}
class UserException extends Exception{
         UserException(){
          super("数据为负数");
       }
 }
转载请注明来源:Java异常处理概述
回复 取消