Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Вызов метода со сгенерированным исключением?


Автор: BlHol 30.5.2007, 18:15
День добрый!
Вот исходник:
Код

public class Rethrowing {

  public static void f() throws Throwable {
    System.out.println(
      "originating the exception in f()");
    throw new Exception("thrown from f()");
  }
  public static void g() throws Throwable {
    try {
      f();
    } catch(Exception e) {
      System.err.println(
        "Inside g(), e.printStackTrace()");
      e.printStackTrace(System.err);
      //throw e; // 18
      throw e.fillInStackTrace(); // 19
    }
  }
  public static void
  main(String[] args) throws Throwable {
    try {
      g();
    } catch(Exception e) {
      System.err.println(
        "Caught in main, e.printStackTrace()");
      e.printStackTrace(System.err);
    }
  }
} ///:~


В таком виде работает нормально. Также все работает нормально, если я в определении метода со сгенерированным исключением (самый первый в коде) указываю, что 
Код

..... throws Exception

а не
Код

..... throws Throwable


А вот если я в нижележащих методах, где вызывается этот метод указываю
Код

..... throws Exception

а не
Код

..... throws Throwable
,
то выдает ошибку:
unreported exception java.lang.Throwable; must be caught or declarated to be thrown <method_name()>

В чем причина?

Заранее спасибо.
С уважением.


Автор: s8e8r8g8e 30.5.2007, 21:25
логично, в catch блоке кидается Throwable, что намного шире чем указанный как бросаемый Exception вот и выдаёт
смотри что возвращает fillInStackTrace();

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)