Проблема с “объемами” переменных в попытке ловит блоки в Java

Кто-либо мог объяснить меня, почему в последних строках, br не распознан как переменная? Я даже попытался вставить br try clause, установка его как final, и т.д. это имеет какое-либо отношение к Java не, поддерживают закрытия? Я - 99%-й уверенный подобный код, работал бы в C#.

private void loadCommands(String fileName) {
    try {
        final BufferedReader br = new BufferedReader(new FileReader(fileName));

        while (br.ready()) {
            actionList.add(CommandFactory.GetCommandFromText(this, br.readLine()));
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (br != null) br.close(); //<-- This gives error. It doesn't
                                    // know the br variable.
    }       
}

Спасибо

21
задан Daniel Martin 18 May 2010 в 01:59
поделиться

2 ответа

Потому что он объявлен в блоке try. Локальные переменные, объявленные в одном блоке, недоступны в других блоках, кроме случаев, когда они содержатся в нем, т.е. переменные выходят за пределы области видимости, когда их блок заканчивается. Сделайте это:

private void loadCommands(String fileName) {
    BufferedReader br = null;
    try {
        br = new BufferedReader(new FileReader(fileName));

        while (br.ready()) {
            actionList.add(CommandFactory.GetCommandFromText(this, br.readLine()));
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (br != null) try { br.close(); } catch (IOException logOrIgnore) {}
    }       
}
41
ответ дан 29 November 2019 в 20:24
поделиться

br определен в блоке try, поэтому он не входит в область видимости в блоке finally.

Определите br вне блока try.

1
ответ дан 29 November 2019 в 20:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: