是的,该尝试的范围仅限于此。事实上范围开头{和结尾},因此这也将创建一个子范围
void foo() {
{
Ini myIni = new Ini(new FileReader(myFile));
}
myIni.get("toto"); //error here, since myIni is out of scope
}
要解决你的问题,与空初始化myIni
,并意识到,如果尝试失败,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
您的整个使用,如果这是可能和适当的建议。您选择的解决方案取决于您的其他要求和设计。
不要做'e.printStackTrace()'。只是'抛e'。 – BalusC