抛出异常

前面的示例已经捕获了JVM自动产生的异常.然而,通过使用throw语句也可以手动抛出异常.基本形式如下所示:
throw exceptOb;
这里,exceptOb必须是从Throwable派生的异常类的对象.
下面是一个通过手动抛出ArithmeticException来说明throw语句作用的示例:
    public static void main(String args[])
    {
        try {
         System.out.println("before throw");
         throw new ArithmeticException();
     } catch(ArithmeticException exc) {
         System.out.println("exception caught");
     }
        System.out.println("after try/catch  block");
    }
程序输出如下所示:
before throw
exception caught
after try/catch block
注意在throw语句中是如何使用new创建ArithmeticException的.切记,throw抛出的是对象,因此必须为类型创建一个对象,再抛出此对象,而不能仅仅抛出类型.
问:为什么需要手动抛出异常?
答:大多数情况下,你所抛出的异常都是自己创建的异常类的实例,我们可以将自己创建的异常类做为程序整体异常处理策略的一部分来处理代码中的错误.
重新抛出异常
由catch语句捕获的异常可以重新抛出使外部catch可捕获.这种重新抛出的异常最大原因是为了允许多重程序访问异常.例如,一个异常处理程序负责异常的一方面,而另一个异常处理程序则负责另一方面.切记,当重新抛出异常时,异常不会被同一个catch语句再次捕获,而是被传送到下一个catch语句.下面是一个用于样式重新抛出异常的程序:
public class test2
{
    // @param args
    public static void main(String args[])
    {
        try {
            Rethrow.getException();
        }catch(Throwable exc) {
            System.out.println("catched by main  function");
        }
    }
}
class Rethrow
{
    public static void getException()
    {
        try {
         System.out.println("before throw");
         throw new ArithmeticException();
     } catch(ArithmeticException exc) {
         System.out.println("exception caught");
         throw exc;
     }
    }
}
输出:
before throw
exception caught
catched by main function