有时你需要重新抛出那个刚捕捉到的,用Exception捕捉到的异常。由于你已经有了当前异常的reference,因此你可以直接讲那个reference重抛出来。重抛会把异常送到更高一层的异常处理程序去。同一个try区块的其它catch子句都将被忽略。此外,它还会保留异常对象里的所有信息,这样捕获这个异常的上一层的异常处理程序就能够提取这个对象中的所有信息了。
如果你直接重抛当前的异常,则printStackTrace()方法所打印出来的那些保存在异常对象里的信息,还会指向异常发生的地方,它们不会被指到你重抛异常的地点。如果你要装载新的栈轨迹信息,你可以调用fillInStackTrace(),这个方法会将当前栈的信息塞进旧的异常对象中,并返回一个throwable对象。
如果方法抛出了异常,那么必须要有能捕捉这个异常,并且处理这个异常的程序。异常处理有一个好处,就是它能让你集中精力在一个地方解决问题,然后将处理错误的代码分开来放在另一个地方。要想理解异常是怎样被捕捉到的,你必须首先懂得“守护区域”的概念。这是一段可能会产生异常的代码,并且后面还跟着要处理这些异常的代码。
如果你从方法里面抛出了一个异常(或是在这个方法调用的另一个方法里面抛出一个异常),那么抛出异常的同时,这个方法会退出运行。如果你不想被throw出方法,那么你可以在这个方法的内部建一个特殊的区块来捕获这个异常。这就被称为try区块,因为你在这里try各种方法调用。Try区块是跟在try关键词后面的程序块。