выдает исключение, приводит программу к предварительно написанному коду - PullRequest
0 голосов
/ 19 ноября 2009

(требуется терпение, так как я новичок в программировании)

при добавлении фразы выдает ABCexception в объявлении метода следующим образом

public static void main(String[] args) throws ABCException {

}

означает ли это, что вы ожидаете, что метод может сгенерировать исключение ABC, и при написании throws ABCException ... когда это исключение произойдет ... это исключение будет перехвачено, и будет выполнен некоторый заранее написанный код на языке Java, соответствующий ABCException ,

спасибо

Ответы [ 2 ]

3 голосов
/ 19 ноября 2009

throws объявляет, что метод может выдать исключение , поэтому к нему должен быть подготовлен код, вызывающий этот метод.

Подготовка к исключению означает, что код может перехватить исключение или повторно его выбросить.

Рассмотрим конструктор new FileInputStream(File pFile), который создаст FileInputStream из File объекта. Поскольку файл может не существовать или быть недоступным для чтения, конструктор выдаст исключение FileNotFoundException (как объявлено).

Так что любой код, который вызывает этот конструктор, будет либо перехватывать, либо перебрасывать его.

Поймав это, код сам позаботится об этом исключении, а перебросив его, код позволит вызывающему позаботиться об этом.

Рассмотрим следующие два кода:


Код 1: Улов -> Позаботься об этом

public String readTextFile(File pFile) {
    try {
        FileInputStream FIO = new FileInputStream(pFile);
        ... // Do the reading and return
    } catch (FileNotFoundException E) {
        System.err.println("The file is not found");
    }
}

Код 2: Бросок -> Пусть вызывающий позаботится о

public String readTextFile(File pFile) throws FileNotFoundException {
    FileInputStream FIO = new FileInputStream(pFile);
    ... // Do the reading and return
}

Так что вызывающий readTextFile должен будет также поймать или отбросить его.


Этот механизм гарантирует, что кто-то должен каким-то образом позаботиться об исключении.

Надеюсь, я помогу.

1 голос
/ 19 ноября 2009

Оператор thows ABCException до начала определения функции всерьез означает, что эта функция может вызвать такое исключение.

Фактическое исключение будет происходить в коде функции. С кодом, подобным следующему (обратите внимание на отсутствие символа 's' в конце символа throw)

  throw new ABCException();

Затем исключения передаются «вверх» по цепочке логики программы, которая назвала эту функцию этой функцией, пока одно из них не «поймает» исключение и не обработает его. В случае, если исключение «возвращает обратно» всю функцию main (), и если упомянутое исключение также не поймано там, обработчик по умолчанию имеет дело с ним, обычно выводя исключение в stderr / stdout и останавливая его.

Способ, которым это исключение может быть перехвачено, будет с помощью конструкции try-catch, например:

try
{
  // do some stuff if needed
  xy = fct();  // this fct may throw the ABCExeption...
  // do more stuff as well
}
catch (ABCException e)
{
  // for debugging you can do this
  e.printStackTrace();
  // otherwise you could deal with this exception as desired.
}

Перечитывая вопрос, я заметил, что функция, которая объявлена ​​с throws ABCException, и это немного странно, потому что main - это первый метод в цепочке вызовов функций, что означает, что ничего нет до main (), которая могла бы перехватить исключение (кроме обработчика исключений по умолчанию Java Runtime, которое не будет делать ничего особенного для ABCException; оно просто «выгрузит» его на консоль (или в другом месте для GUI- приложения), как и любое другое исключение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...