Java开发人员可以做出的最重要的架构性决策之一就是如何使用Java异常模型。Java不是第一种支持异常算法语义的;但是,它却是第一种通过编译器来执行声明和处理某些异常的规则的语言。
Java异常处理机制
①Java程序的执行过程中如出现异常,会自动生成一个异常类对象,该异常对象将被提交给Java运行时系统,这个过程称为抛出(throw )异常。
②当Java运行时系统接收到异常对象时,会寻找能处理这一异常的代码并把当前异常对象交给其处理,这一过程称为捕获(catch )异常。
③如果Java运行时系统找不到可以捕获异常的方法,则运行时系统将终止,相应的Java程序也将退出。
④程序员通常只能处理违例(Exception),而对错误(Error)无能为力。
try -catch -finally
①try —将可能出现异常的代码都放在try 代码块中,当然,也可以将其他的一些不会引起异常的代码也一并放到try 代码块中。
②catch 从句中引入一个可能出现的异常,一个try 块可以和多个catch 块配合以处理多个异常。
③当try 块内的任何代码抛出了由catch 子句指定的异常,则try 代码端中的程序将会终止执行,并跳到相应的catch 代码块中来执行。
④无论是否出现异常,程序最后都会执行finally 代码块中的内容。
public class TestException {
public TestException() {
}
public static void main(String[] args) {
String s = null ;
try {
//可能会抛出特定异常的代码段
s.toString();
} catch (NullPointerException e) {
/*catch 从句中引入一个可能出现的异常,一个try块可以和多个catch块配合以处理多个异常当try块内的任何代码抛出了由catch 子句指定的异常,则try代码端中的程序将会终止执行,并跳到相应的catch代码块
中来执行*/
s = "字符串" ;
System.out.println("Start........" );
e.printStackTrace();
System.out.println("end.........." );
} catch (Exception otherException) {
//如果otherException异常被抛出,执行这段代码
} finally {
/*无论是否出现异常,程序最后都会执行finally代码块中的内容*/
//当要把除内存之外的资源恢复到他们的初始状态就要用到finally语句
System.out.println("finally 中的代码一般用于资源的回收" );
}
}
}
三条规则可以帮助你避免错误处理异常所可能遭遇的风险。
规则①:
总是捕获扔出异常的类型而不要理睬异常的超类。清单B中的代码片断以示例的方式从错误编码和正确编码两个角度进行了说明。为了遵守通常的代码习惯,你可以采用Exception类的大写字母作为变量名,如下所示:
catch (FileNotFoundException fnfe)以及catch (SQLException sqle)
规则②:
决不让catch 块留空。在很多情况下虽然确实编写了try /catch 块但在代码的catch 部分却什么都没有做。或者,如果采用了日志API(Logging API),那么请编写代码把异常写到日志中。清单C 显示了以上编码的错误方式和正确方式。
规则③:
决不扔出Exception基类的实例。开发人员应当总是扔出自己创建的异常类。扔出异常的API很难处理。在声明方法扔出java.lang.Exception的情况下,清单A中所有的问题都会强加在API用户的头上,这样他们就无法以一种专业的编程方式来处理异常。通过为扔出API声明Exception类的子类这一举措,API开发人员就可以减轻用户的负担。
Java基础-exception系列2(转载)
最新推荐文章于 2024-10-07 09:58:35 发布