Java编程中的异常处理是一个很常见的话题了,几乎任何一门介绍性的Java课程都会提到异常处理。不过,我认为很多人其实并没有真正掌握正确处理异常情况的方法和策略,最多也就不过了解个大概,知道点概念。本文就对三种不同程度和质量的Java异常处理进行了讨论,所阐述的处理异常的方式按手法的高下分为:好,不好和恶劣三种。同时向你提供了一些解决这些问题的技巧。
异常处理提供了处理程序错误的统一机制。事实上,Java语言通过向调用者提出异常警告的方式而显著地提升了软件开发中的异常处理能力。这种方式把Java语言中的“方法(method)”进行了扩展和增强,使之包括了自身的错误条件。下面就让我们看一个例子,这个例子说明了这种情况。
以下是FileInputStream构造器之一的原型:
public FileInputStream(String name) throws FileNotFoundException
这个原型和C或者C++语言中的同类原形都不一样,Java的方法和构造器必须声明他们在被调用时可能“扔出”的异常,采用的关键字就是“throws”。这种在方法原型中出现的异常提示增加了编程的可靠性。显而易见,这种方式是向方法的调用者提示意了可能出现的异常条件,这样调用者就可以对这些异常作出适当的相应处理。
以下代码示意我们是如何捕获并且处理FileNotFoundException 这一异常的:
try { FileInputStream fis = new FileInputStream(args[0]); // other code here ... } catch (FileNotFoundException fnfe) { System.out.println("File: " + args[0] + " not found. Aborting."); System.exit(1); }
Java异常处理还有其他一些优秀的特性,这就是可检查异常、用户定义异常和在JDK 1.4中推出的新型Java记录API(Java Logging API)。
Java.lang.Exception的所有子类都属于可检查异常。可检查异常(checked exception)是扔出该异常的方法所必须提示的异常,这种异常必须被捕获或者向调用者提示。
用户定义异常(User-defined exceptions)是定制的异常类,这种异常类扩展了Java.lang.Exception类。优良的Java程序规定定制异常封装、报告和处理他们自己独有的情况。最新的Java记录API(logging API)则可以集中记录异常。