我记得在我的c++
课程中,我们会在打开文件时使用以下代码来处理错误:
ifstream in;
in.open("foo.txt");
if(in.fail()){
cout << "FAILURE. EXITING..." << endl;
exit(0);
}
现在我正在学习java
,我在使用try/catch
语句时遇到了问题,因为当我创建一个扫描程序来读取我的输入文件时,它在try
之外无法识别1}}代码块。在fail()
中是否有exit(0)
和java
的等价物,还是有更好的方法?
答案 0 :(得分:3)
我在使用try / catch语句时遇到了问题,因为当我创建一个扫描程序来读取我的输入文件时,它并没有被识别出来之外的尝试&#39;尝试&#39;代码块。
好!你不应该在try
区块之外使用它。文件的所有相关处理都应该在内部 try
块中,例如:
try (
InputStream istream = new FileInputStream(/*...*/); // Or Reader or something
Scanner scanner = new Scanner(istream)
) {
// Use `scanner` here
}
// Don't use `scanner` here
(那是使用新的try-with-resources。)
在上文中,我假设当你说Scanner时,你是专门讨论Scanner
类。
回答您的实际问题:不,这不是Java代码中的标准做法。 Java包含异常。
答案 1 :(得分:1)
要让Scanner
在try...catch
块之外可见,只需在块之外声明变量:
Scanner scanner = null;
try {
scanner = ... //Initialize scanner
} catch (IOException e) {
//Catch
}
现在,您可以在try...catch
块之外使用扫描仪对象。要检查初始化是否成功,您可以检查null
是否真的必须,但通常应在catch
块内进行错误处理,例如
try {
scanner = ... //Initialize scanner
} catch (IOException e) {
System.out.println("Failure. Exiting");
exit(1);
}
答案 2 :(得分:0)
您可以将throws Exception添加到使用扫描程序的方法中。
void method_name()抛出异常{方法的定义}
由此,方法知道代码的某些部分将抛出异常并需要处理。