java异常处理

一、异常介绍

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 对象栈层次,添加到栈层次任何先前信息中。
























  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值