一、异常概述 

  异常处理已经成为衡量一门语言是否成熟的标准之一,目前的主流编程语言如C++、C#、Ruby、Python等,大都提供了异常处理机制。增加了异常处理机制后的程序有更好的容错性,更加健壮。
二、传统错误处理的缺陷
  –无法穷举所有异常情况:因为人类知识的限制,异常情况总比可以考虑到的情况多,总有“漏网之鱼”的异常情况,所以程序总是不够健壮。
  –错误处理代码和业务实现代码混杂:这种错误处理和业务实现混杂的代码严重影响程序的可读性,会增加程序维护的难度。
三、java的异常体系
四、异常信息
所有异常对象都包含了如下几个常用方法:
  –getMessage():返回该异常的详细描述字符串。
  –printStackTrace():将该异常的跟踪栈信息输出到标准错误输出。
  –printStackTrace(PrintStream s):将该异常的跟踪栈信息输出到指定输出流。
  –getStackTrace():返回该异常的跟踪栈信息。 
五、finally
try
{
	需要检测的代码;
}
catch(异常类  变量)
{
	异常处理代码;
}
finally
{
	一定会执行的代码;	
}

finally中的代码一定会执行,所以可以使用finally回收资源。

  程序在try块里打开了一些物理资源(例如数据库连接、网络连接和磁盘文件等),这些物理资源都必须显式回收。 
  为了保证一定能回收try块中打开的物理资源,异常处理机制提供了finally块。不管try块中的代码是否出现异常,也不管哪一个catch块被执行,finally块总会被执行。 

:Finally代码块只有一种情况不会被执行。就是在之前执行了System.exit(0)。

 

六、多异常捕捉

在Java 7以前,每个catch块只能捕捉一个异常。但从Java 7开始,一个catch块可以捕捉多个异常。

catch(异常1 | 异常 2 | 异常3 ex)
{
}

  多个异常之间用竖线隔开。

  多异常捕捉时,异常变量之前有隐式final修饰。
七、异常跟踪栈
  异常对象的printStackTrace方法用于打印异常的跟踪栈信息,根据printStackTrace方法的输出结果,我们可以找到异常的源头,并跟踪到异常一路触发的过程。
  面向对象的应用程序运行时,经常会发生一系列方法调用,从而形成“方法调用栈”,异常的传播则与相反:只要异常没有被完全捕获(包括异常没有被捕获,或异常被处理后重新抛出了新异常),异常从发生异常的方法逐渐向外传播,首先传给该方法的调用者,该方法调用者再次创给其调用者……直至最后传到 main方法,如果main方法依然没有处理该异常,JVM会中止该程序,并打印异常的跟踪栈信息。
八、异常处理规则
  不要过度使用异常
  不要使用过于庞大的try块
  避免使用Catch All语句

  不要忽略捕获到异常   

版权声明:本文为lixiaolun原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/lixiaolun/p/4320835.html