我见过有人说使用不带参数的catch是不好的形式,特别是如果catch没有做任何事情:
StreamReader reader=new StreamReader("myfile.txt");
try
{
int i = 5 / 0;
}
catch // No args, so it will catch any exception
{}
reader.Close();
Run Code Online (Sandbox Code Playgroud)
但是,这被认为是好的形式:
StreamReader reader=new StreamReader("myfile.txt");
try
{
int i = 5 / 0;
}
finally // Will execute despite any exception
{
reader.Close();
}
Run Code Online (Sandbox Code Playgroud)
据我所知,将清理代码放在finally块中并在try..catch块之后放置清理代码之间的唯一区别是,如果你的try块中有return语句(在这种情况下,最后清理代码将是运行,但try..catch之后的代码不会).
否则,最后有什么特别之处?
我正在测试java中的输出流,如下所示.
Writer outputStream = getOutputStream(fileName);
if(outputStream != null) {
try {
outputStream.write(inputText);
}
finally {
outputStream.close();
}
}
else {
throw new IOException("Output stream is null");
}
Run Code Online (Sandbox Code Playgroud)
我正在写一个mockito测试,如下所示
public void testFileWrite() throws IOException {
when(testObj.getOutputStream(outputFileNameValidValue)).thenReturn(outputStreamMock);
doNothing().when(outputStreamMock).write(Matchers.anyString());
doNothing().when(bufferedReaderMock).close();
testObj.write(outputFileNameValidValue, reveredFileInput);
verify(outputStreamMock).write(Matchers.anyString());
verify(outputStreamMock).close();
}
Run Code Online (Sandbox Code Playgroud)
问题是在创建OutputStreamWriter(new FileOutputStream(filename))磁盘上创建物理文件时.
我们可以测试Outputstream.write而不实际在磁盘上写文件吗?
谢谢阿南德
使用Try Catch Final块的最佳实践是什么?您更喜欢只使用try finally块而不尝试catch块吗?我一直以为最终尝试捕获是最佳的使用方法。但是,在我正在使用的部分代码中,我看到了这样的代码:
试试{doSomething(); }最后{doSomethingElse(); }
由于他们没有捕获到异常,因此我很难调试代码。对我而言,不使用catch而是仅在最后使用,这不是一个很好的习惯,但是我可能错了。
据我所知,这实际上不是一个好习惯。基本上,我们没有利用尝试捕获的意图。我也发现了类似的问题。
我的问题是:“在以下假设上您是否同意我的观点:最佳实践是一起尝试最后捕获而不是最终尝试。” 如果您不同意,请您提供一个示例,说明何时使用try try而不是try catch,为什么您认为try try优于try catch?