Философия Java


Повторное выбрасывание исключений - часть 3


// Повторное выбрасывание объекта, // отличающегося от пойманного.

class OneException extends Exception { public OneException(String s) { super(s); } }

class TwoException extends Exception { public TwoException(String s) { super(s); } }

public class RethrowNew { public static void f() throws OneException { System.out.println( "originating the exception in f()"); throw new OneException("thrown from f()"); } public static void main(String[] args) throws TwoException { try { f(); } catch(OneException e) { System.err.println( "Caught in main, e.printStackTrace()"); e.printStackTrace(System.err); throw new TwoException("from main()"); } } } ///:~

Вот что напечатается:

originating the exception in f() Caught in main, e.printStackTrace() OneException: thrown from f() at RethrowNew.f(RethrowNew.java:17) at RethrowNew.main(RethrowNew.java:22) Exception in thread "main" TwoException: from main() at RethrowNew.main(RethrowNew.java:27)

Конечное исключение знает только то, что оно произошло в main( ), а не в f( ).

Вам никогда не нужно заботится об очистке предыдущего исключения или что другое исключение будет иметь значение. Они являются объектами, базирующимися в куче и создающимися с помощью new, так что сборщик мусора автоматически очистит их все.




Начало  Назад  Вперед