Да, область действия попытки ограничена этим. Фактически область действия начинается с {и заканчивается}, таким образом, это также создаст под-область действия
void foo() {
{
Ini myIni = new Ini(new FileReader(myFile));
}
myIni.get("toto"); //error here, since myIni is out of scope
}
Чтобы устранить проблему, инициализируйте myIni
со значением null и помните, что в случае неудачной попытки myIni.get("toto");
приведет к исключению NullPointerException.
Так что вам нужно либо учесть это, либо выбросить другое исключение из вашего блока catch.
Проверка на ноль:
Ini myIni = null;
try {
myIni = new Ini(new FileReader(myFile));
} catch (IOException e) {
e.printStackTrace();
}
if( myIni != null ) {
myIni.get("toto");
//access the rest of myIni
} else {
//handle initialization error
}
Исключение броска:
Ini myIni = null;
try {
myIni = new Ini(new FileReader(myFile));
} catch (IOException e) {
e.printStackTrace();
throw new MyCustomInitFailedException(); //throw any exception that might be appropriate, possibly wrapping e
}
myIni.get("toto");
Как уже предложено @khachik, вы можете также поставить блок try вокруг всего использования myIni
, если это возможно и уместно. Какое решение вы выберете, зависит от других ваших требований и вашего дизайна.