尽管Java的内置异常处理了多数常见错误,但Java的异常处理机制并不限于处理这些错误.事实上,Java的异常处理机制还能够处理你创建的异常类型.通过使用自定义异常,可以处理与应用程序相关的错误.创建异常很容易,只需定义一个Exception(他是Throwable的子类)的子类即可.你的子类无须做任何实际的工作–正是他们在类型系统中的存在允许你将其作为异常使用.
Exception类不定义任何自己的方法,而是继承Throwable提供的那些方法.因此,Throwable定义的方法对于所有的异常,包括你自己创建的异常在内都有效.当然,可以创建的异常子类中重写这些方法的一个或多个.
下面的示例中创建了一个名为NonIntResultException的异常,该异常在两个整数相除的结果出现小数时产生.NonIntResultException包含保存整数值的两个域,一个构造函数和一个重写的toString()方法,该方法允许使用println()来显示对异常的描述.
public class test2 { // @param args public static void main(String args[]) { try { throw new NonIntResultException(1,2); }catch(NonIntResultException exc) { System.out.println(exc.toString()); } } } class NonIntResultException extends Exception { int n,d; NonIntResultException(int i,int j) { n=i; d=j; } public String toString() { return "Result of "+n+"/"+d+" is non-integer"; } }
输出:
Result of 1/2 is non-integer
问:应该什么时候在程序中使用异常处理?什么时候创建自己的自定义异常类?
答:由于Java API大量使用异常来报告错误,因此几乎所有的实际程序都会使用异常处理.这是大多数Java新程序员都容易掌握的异常处理内容.何时及如何使用自定义异常比较难确定,通常,可以采用两种方式来报告错误:返回值和异常.二者孰优孰劣呢?简单的讲,在Java中异常处理更常用,虽然返回错误代码在某些情况下也是一种有效的方式,但是异常处理可以提供一种更强大的结构化方法来处理错误.专业的Java程序员大多采用异常的方法来处理代码中的错误.