Есть ли использование для вложенной попытки, если без catch? - PullRequest
2 голосов
/ 15 апреля 2019

Наткнулся на приведенный ниже код из книги по Java

public void writeFile(String fileName, String content){
    File file = new File(fileName);

    try {
        try (PrintWriter output = new PrintWriter(new FileWriter(file))) {
          output.println(content);
          output.println();
          output.println("End of writing");
        }
        System.out.println("File been written successfully");
    } catch (IOException ex) {
      ex.printStackTrace(System.out);
    }
}

Нет ничего плохого в приведенном выше коде, я просто не вижу смысла в наличии вложенного try, который не определяет внутренний блок catch. Или есть какая-то цель, в которой я пропустил это?

Пересмотренный код:

public void writeFile(String fileName, String content){
    File file = new File(fileName);

    try (PrintWriter output = new PrintWriter(new FileWriter(file))) {
        output.println(content);
        output.println();
        output.println("End of writing");
        System.out.println("File been written successfully");
    } catch (IOException ex) {
      ex.printStackTrace(System.out);
    }
}

1 Ответ

4 голосов
/ 15 апреля 2019

Внутренняя попытка - это попытка с ресурсами:

try (PrintWriter output = new PrintWriter(new FileWriter(file)))

это означает, что она управляет ресурсом - PrintWriter - открывает его и закрывает после каждого оператора в этой попытке.Для определения ошибки используется внешняя попытка.

Ваш исправленный код, предложенный Петтером Фрибергом, эквивалентен.

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