java异常处理

来源:互联网 发布:百度云限速脚本 知乎 编辑:程序博客网 时间:2024/06/11 03:19
一、异常介绍

Java异常是一个描述在代码段中发生的异常(也就是出错)情况的对象。
java提供了大量的异常类,这些类都继承自java.lang.Throwable类。下面是Throwable类的继承体系。


    • Error类为错误类,表示java运行时产生的系统内部错误或资源耗尽的错误,是比较严重的,仅靠程序本身是不能解决的。
    • Exception类为异常类,表示程序本身可以处理的错误,在开发java程序中进行的异常处理,都是针对Excption类及其子类。
   在Exception类的子类中,自由RuntimeException类是表示运行时的异常,其他子类表示编译时的异常。

    • 编译时异常:java编译器会对其进行检查,如果出现异常就必须对异常进行处理,否则无法通过便宜。
    • 运行时异常:java编译器不会对其进行检查,出现异常时都能编译通过。例如:数组越界;


二、try..catch和finally
  
try..catch语句用于捕获异常,try会捕获在其内代码出现的异常,并在catch中处理。
try{//可能出现异常的代码块;}catch(ExceptionName e1){//处理块;}

    • catch代码块处理完后,程序会继续向下执行,即执行在try..catch外面下面的代码。
    • try代码块中出现异常后,代码块中没执行的代码不会继续执行,直接在catch中处理。
    • catch中声明了接受异常的类型,必须是Exception类或其子类。

多重捕获块,
try{ //程序代码 }catch(异常类型1异常的变量名1){ //程序代码 }catch(异常类型2异常的变量名2){ //程序代码 }catch(异常类型2异常的变量名2){ //程序代码 }
  • 如果保护代码中发生异常,异常被抛给第一个 catch 块。
  • 如果抛出异常的数据类型与 ExceptionType1 匹配,它在这里就会被捕获。
  • 如果不匹配,它会被传递给第二个 catch 块。
  • 如此,直到异常被捕获或者通过所有的 catch 块。

finally:加在try..catch后面,无论程序是否发生异常都会执行finally中的代码。
try{ //程序代码 }catch(异常类型1异常的变量名1){ //程序代码 }finally{ //程序代码 }

    • 只有在执行了System.exit(0)语句后,finally中的代码块才不会执行,因为该代码表示退出当前的java虚拟机,虚拟机停止后任何代码都不能执行了。
    • 在 finally 代码块中,可以运行清理类型等收尾善后性质的语句。


三、throws关键字

throws用于在某一方法中抛出异常。
publicclassclassName {  publicstaticvoid main(Stringargs[]){    try{        double i;       withdraw(i);    }catch(ArrayIndexOutOfBoundsExceptione){        System.out.println("Exception thrown :"+e);     }   }  publicvoidwithdraw(doubleamount)throwsException {  } }

    • 在使用throws抛出方法中的异常时,必须需要在调用的时候对抛出的异常进行捕获,否则会发生编译错误。
    • throws后面声明发生异常的类型,为方法声明抛出一个异常。


四、自定义异常

自定义异常便是创建一个异常类,但必须继承Exception类或其子类。
publicclassInsufficientFundsException extends Exception {   publicInsufficientFundsException(){    super();  }   publicInsufficientFundsException(String message){    super(message);//调用Exception有参的构造方法;  } }publicclassclassName {  publicstaticvoid main(Stringargs[]){     try{  //捕获异常;       double i;       withdraw(i);     }catch(InsufficientFundsException e){        System.out.println(e.getMessage);      }   }  publicvoidwithdraw(doubleamount)throwsInsufficientFundsException {    int i=2;    if(i>0){       thrownewInsufficientFundsException("i大于0");//抛出异常;    }  } }



五、异常方法

public String getMessage()返回关于发生的异常的详细信息。这个消息在Throwable 类的构造函数中初始化了。public Throwable getCause()返回一个Throwable 对象代表异常原因。public String toString()使用getMessage()的结果返回类的串级名字。public void printStackTrace()打印toString()结果和栈层次到System.err,即错误输出流public StackTraceElement [] getStackTrace()返回一个包含堆栈层次的数组。下标为0的元素代表栈顶,最后一个元素代表方法调用堆栈的栈底public Throwable fillInStackTrace()用当前的调用栈层次填充Throwable 对象栈层次,添加到栈层次任何先前信息中。
























原创粉丝点击