Java 异常处理

Java异常时用来描述在一段代码中发生的异常情况的对象。

当出现引起异常的情况时,就会创建用来表示异常的对象,并在引起错误的方法中抛出异常对象。

Java的异常处理通过5个关键字进行处理:

1、try

2、catch

3、throw

4、throws

5、finally

所有的异常都是内置类Throwable的子类。紧随着Throwable之下的都是两个子类,他们将异常分为另个不同的分支,一个分支是Exception。另一个是Error。

我们常用的手动捕获的异常处理模块的一般形式为:

try{

}catch(ExceptionType e){

}

try{

}catch(ExceptionType e){

}finally{

}

1、try catch

为了防止并处理运行时的错误,可以简单地在try代码块中封装希望得到监视的代码。紧随着try之后,会出现一条catch语句,指定希望捕获的异常类型。

示例代码如下:

public class Test {
  public static void main(String [] args){
    try{
      int a = 0;
      int b= a/a;
    }catch(ArithmeticException e){
      System.out.println("devide by zero: "+e);
     }
    }
}

最后的输出结果是:

devide by zero: java.lang.ArithmeticException: / by zero

当然我们也可以使用多条catch子句,不过需要注意的一点事,异常子类必须位于所有的超类之前

举例说明,下面的程序就会出现编译错误

public class Test {
  public static void main(String [] args){
    try{
      int a = 0;
      int b= a/a;
    }catch(Exception e){//异常超类不能再子类之前
      System.out.println("this is an exception"+e);
     }catch(ArithmeticException e){
      System.out.println("devide by zero: "+e);
    }
   }
}

也可以使用嵌套的try语句,就是try语句里面嵌套一个try语句。

2、throw和throws

throw

在Java程序中我们自己通过throw抛出异常。

throw的一般形式是:

throw ThrowableInstance;

其实ThrowableInstance必须是Throwable或者其子类的对象。

有两种方式可以获取Throwable对象:

a、在catch子句中使用参数

b、new一个新的对象

举例说明:

public class Test {
  public static void main(String [] args){
    try{
        try{
          throw new NullPointerException();//new关键字
        }catch(NullPointerException e){
          System.out.println("NullPointerException inside"+e);//在catch子句中使用参数
          throw e;
          }
      }catch(NullPointerException e){
        System.out.println("NullPointerException outside"+e);
       }
  }
}

最后的输出结果是:

NullPointerException insidejava.lang.NullPointerException
NullPointerException outsidejava.lang.NullPointerException

throws

如果方法可能引发自身不进行处理的异常,就必须指明这种行为,以便方法的调用者能够保卫他们自己以防备上诉的异常。

throw子句的方法声明的一般形式:

type method_name(parameter_list)throw exception_list{

//body of method

}

3、finally

finally后面的代码块,不管异常时候抛出都会执行

原文地址:https://www.cnblogs.com/cuglkb/p/5737323.html