关于异常处理的部分总结

Java异常体系结构 

    Thorwable类所有异常和错误的超类,有两个子类Error和Exception,分别表示错误和异常。 


  其中异常类Exception又分为运行时异常(RuntimeException)和非运行时异常, 

    这两种异常有很大的区别,也称之为不检查异常(Unchecked Exception) 
    和检查异常(Checked Exception)。下面将详细讲述这些异常之间的区别与联系: 

    1、Error与Exception 
    Error是程序无法处理的错误,比如OutOfMemoryError、ThreadDeath等。这些异常发生时, 
    Java虚拟机(JVM)一般会选择线程终止。 
    Exception是程序本身可以处理的异常,这种异常分两大类运行时异常和非运行时异常。 
    程序中应当尽可能去处理这些异常。 

    2、运行时异常和非运行时异常 
    运行时异常都是RuntimeException类及其子类异常,如NullPointerException、IndexOutOfBoundsException等, 
    这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的, 
    程序应该从逻辑角度尽可能避免这类异常的发生。 
    非运行时异常是RuntimeException以外的异常,类型上都属于Exception类及其子类。 
    从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。 

 所有方法都可以在不声明throws的情况下抛出RuntimeException及其子类;      不可以在不声明的情况下抛出非RuntimeException

try{

//尝试运行的程序代码

}catch(异常类型 异常的变量名){

//异常处理代码

}finally{

//异常发生与不发生都要执行的代码

}

  1. try语句块,表示要尝试运行代码,try语句块中代码受异常监控 


 使用trycatch关键字可以捕获异常。try/catch代码块放在异常可能发生的地方。
try/catch代码块中的代码称为保护代码,使用 try/catch的语法如下:

try
{
   //Protected code
}catch(ExceptionName e1)
{
   //Catch block
}
catch语句带一个Throwable类型的参数,  表示可捕获异常类型。

当try中出现异常时,catch会捕获到发生的异常,并和自己的异常类型匹配, 
    若匹配,则执行catch块中代码,并将catch块参数指向所抛的异常对象。

catch语句可以有多个, 下面是示例代码:

try
{
   //Protected code
}catch(ExceptionType1 e1)
{
   //Catch block
}catch(ExceptionType2 e2)
{
   //Catch block
}catch(ExceptionType3 e3)
{
   //Catch block
}
    用来匹配多个中的一个异常,一旦匹配上后,就不再尝试匹配别的catch块了。 
    通过异常对象可以获取异常发生时完整的JVM堆栈信息,以及异常信息和异常发生的原因等。 

    finally语句块是紧跟catch语句后的语句块,这个语句块总是会在方法返回前执行, 
    而不管是否try语句块是否发生异常。并且这个语句块总是在方法返回前执行。 
    目的是给程序一个补救的机会。这样做也体现了Java语言的健壮性。 

一、在finally块中做数据回收操作

二、不要在异常finally块中定义返回值

三、覆写Exception的fillInStackTrace方法能提高异常性能

如果一个方法没有捕获一个检查性异常,那么该方法必须使用throws 关键字来声明。throws关键字放在方法签名的尾部。
也可以使用throw关键字抛出一个异常,无论它是新实例化的还是刚捕获到的。

一个方法可以声明抛出多个异常,多个异常之间用逗号隔开。

声明自定义异常:

在Java中你可以自定义异常。编写自己的异常类时需要记住下面的几点。
  • 所有异常都必须是Throwable的子类。
  • 如果希望写一个检查性异常类,则需要继承Exception类。
  • 如果你想写一个运行时异常类,那么需要继承RuntimeException 类。
可以像下面这样定义自己的异常类:
class MyException extends Exception{
}
只继承Exception 类来创建的异常类是检查性异常类。
下面的InsufficientFundsException类是用户定义的异常类,它继承自Exception。
一个异常类和其它任何类一样,包含有变量和方法。


Throwable类中的常用方法 
    getCause():返回抛出异常的原因。如果 cause 不存在或未知,则返回 null。 
    getMessage():返回异常的消息信息。 
    printStackTrace():对象的堆栈跟踪输出至错误输出流,作为字段 System.err 的值。 

下面的列表是Throwable 类的主要方法:

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值