在Rational Application Developer(基于eclipse的RAD)中,在软件分析器下,我看到一个代码审查注释(在Performance => Memory部分下),说"避免最终的throw语句".
如何在finally块中定义throw会影响性能?
这是代码片段,我们已经建议更改代码以记录异常跟踪并且不抛出异常,
} finally {
if (bufferedReader != null) {
try {
bufferedReader.close();
} catch (final IOException ex) {
throw ex;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我只是想知道这会如何影响内存和性能?
所以我在这里有一些代码,我不确定如果reader.close()方法抛出异常,它会如何反应.
public void someMethod(String s) throws IOException{
BufferedReader reader = Files.newBufferedReader(filePath,cs);
listRWLock.readLock().lock();
try{
//miscellaneous code involving reading
}finally{
reader.close()
listRWLock.readLock().unlock()
}
}
Run Code Online (Sandbox Code Playgroud)
ListRWLock是一个ReentrantReadWriteLock.如果reader.close()方法抛出异常,那么它之后的语句是否会无法执行?我已经尝试搜索这个主题了,虽然我已经得到了一些关于在return语句中最终执行的东西,但是我还没有设法找到如果在finally块中抛出异常会发生什么的细节.
提前致谢.
我对try,catch和finally执行的顺序感到很困惑.
我也想知道我应该何时使用try catch块以及我应该在try catch块中放置什么,我还想知道是否有一些异常出现在try块中然后如果对应于try块采取了一个动作然后执行哪一个第一次捕获或最后(总是要执行),并且在执行这两个之后确实控制返回尝试阻止或者它永远放弃它.
在我的一个Java应用程序代码中,我有一个try-catch-finally块,其中try块创建一些输入和输出流,如果出现问题,我将关闭任何先前打开的流finally.
finally
{
if(inputStream != null)
inputStream.close();
if(outputStream != null)
outputStream.close();
}
Run Code Online (Sandbox Code Playgroud)
但是<stream>.close()Eclipse中的这行显示了该行代码中的"Unhandled exception IOException"错误,并显示该解决方案是try/catch在finally块中包含另一个,这似乎是编程实践中的坏事,我不想在finally块中.
我的问题是:是否有可能在Eclipse中删除此错误并try/catch仅在我需要它时使用而不是eclipse告诉我进行try/catch添加.(因为我已经开始尝试通过更换以避免异常try/catch与if/else越好).
可能重复:
在finally块中抛出异常
只有在try块中抛出异常时才会执行catch块.
如果抛出异常,则始终在try(-catch)块之后执行finally块.
我的问题是,如果我在finally块中得到Exception而不是如何处理它?????