Как обрабатывать исключения после их добавления в основной метод? - PullRequest
0 голосов
/ 26 мая 2020

Есть ли какой-либо метод более высокого уровня, который может перехватить и обработать исключение, возникающее в основном методе?

Как мы можем с этим справиться?

Вот пример, приведенный Введение в Java Программирование (в главе 12)

//Listing 12.13 WriteData.java
class WriteData {
 public static void main(String[] args) **throws IOException** {
    java.io.File file = new java.io.File("scores.txt");
    if (file.exists()) {
      System.out.println("File already exists");
      System.exit(1);
    }

    // Create a file
    java.io.PrintWriter output = new java.io.PrintWriter(file);

    // Write formatted output to the file
    output.print("John T Smith ");
    output.println(90);
    output.print("Eric K Jones ");
    output.println(85);

    // Close the file
    output.close();
  }
}

1 Ответ

1 голос
/ 26 мая 2020

Каждый раз, когда какой-либо поток генерирует исключение, которое не обрабатывается нигде в его стеке вызовов, будет вызываться UncaughtExceptionHandler, присутствующее в Thread (см. Thread.setUncaughtExceptionHandler). . Это относится не только к потоку по умолчанию main, но и ко всем, созданным вручную. По умолчанию поток main не имеет UncaughtExceptionHandler.

Если у Thread его нет, то ThreadGroup обрабатывает его, как описано в ThreadGroup.uncaughtException .

Это демонстрирует, как будет выглядеть простой обработчик исключений:

class ExceptionHandlerSample {
  public static void main(String[] args) {
    Thread.currentThread().setUncaughtExceptionHandler(new MyExceptionHandler());
    ((Object) null).toString(); // force a NullPointerException to be thrown.
  }
}

class MyExceptionHandler implements Thread.UncaughtExceptionHandler {
  @Override
  public void uncaughtException(Thread t, Throwable e) {
    System.out.printf("Thread %s threw an exception of type %s: %s",
        t.getName(), e.getClass().getSimpleName(), e.getMessage());
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...