所以我在这里有一些代码,我不确定如果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块中抛出异常会发生什么的细节.
提前致谢.
我想以下例子; 但无法弄清楚finally块的重要性是什么.你能告诉我这两个代码示例的执行区别吗?现实生活中的例子也很有帮助.
样本1:
try{
// some code 1
}catch(Exception ex){
// print exception
}finally{
// some code 2
}
Run Code Online (Sandbox Code Playgroud)
样本2:
try{
// some code 1
}catch(Exception ex){
// print exception
}
// some code 2
Run Code Online (Sandbox Code Playgroud) 我知道最后在deamon线程中的块不会被执行.但是我一丝不苟地试图理解为什么以及JVM中发生的事情如此特殊以至于无法调用此块下的代码.
我认为它以某种方式与调用堆栈有关,它不能放松,但不知道如何.有人可以对此有所了解.谢谢.
如果你用Ctrl + C停止一个python脚本,它会执行任何finally块,还是它会在字面上停止脚本的位置?
我正在使用axios库并使用then(),catch()和finally().在Chrome中完美运行.但是finally()方法在MS Edge中不起作用.我研究过使用polyfills或垫片,我迷路了.我没有使用webpack或转换,也不打算添加它们.我需要保持这个简单.如何添加polyfill以确保finally()在Edge中有效?谢谢!
public void threadMethod()
{
try
{
// do something
}
catch (ThreadInterruptedException e)
{
Console.WriteLine("[Net]", role, "Thread interrupted.");
n.CloseConnection();
}
finally
{
if (isAutenticated == false)
{
n.CloseConnection();
}
Dispatcher.Invoke(addMessage, "Network connection searching was disabled.");
DebuggerIX.WriteLine("[Net]", role, "Finished");
Dispatcher.Invoke(threadStoppedDel);
}
}
Run Code Online (Sandbox Code Playgroud)
threadMethod方法是通过System.Threading.Thread运行的.线程可能会被中断,因此可能会在finally块中抛出异常ThreadInterruptedException,对吧?我是否必须再次将该块封装在try-catch中?
谢谢!
有什么区别
try {
// action A
}
catch(Exception e) {
// action B
}
finally {
// action C
}
Run Code Online (Sandbox Code Playgroud)
和
try {
// action A
}
catch(Exception e) {
// action B
}
// action C
Run Code Online (Sandbox Code Playgroud)
我已经读过你可以从catch块内部返回并仍然finally执行块.还有其他差异吗?
哪个更适合finally块:
finally {
try {
con.close();
stat.close();
} catch (SQLException sqlee) {
sqlee.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
要么:
finally {
try {
if (con != null) {
con.close();
}
if (stat != null) {
stat.close();
}
} catch (SQLException sqlee) {
sqlee.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud) 我注意到在Java中,如果当前线程在try-block中暂停,则相应的finally块不会被执行,例如
Semaphore lock = new Semaphore(0);
try {
lock.acquire();
} finally {
// do something
}
Run Code Online (Sandbox Code Playgroud)
这种观察可以推广到线程的暂停,即Oracle文档说它只能用于绕过return,break并且continue?
Oracle doc.说:
但最终不仅仅是异常处理有用 - 它允许程序员避免因返回,继续或中断而意外绕过清理代码.
我很确定自己可以解决这个问题,但是如果它可以帮助其他人,我想分享并节省其他人的时间。
我必须添加es6-promise库才能摆脱此错误
Promise only result to a type, but is only used as a value here.
Run Code Online (Sandbox Code Playgroud)
当我尝试使用Promise.all时(请参阅此讨论)。到现在为止,它运行良好,尝试使用MongoDB中的Promise时出现错误。
Promise<whatever> is not assignable to Promise<any>
Property 'finally' is missing in type Promise<whatever>
Run Code Online (Sandbox Code Playgroud)
根据es6-promise上的这个问题(如果我没做错的话),新的finally属性将破坏兼容性。它在Promise Mongo退货单上存在,但不在我从es6-promise导入的那张上。
任何的想法?
finally ×10
java ×6
.net ×1
connection ×1
ctrl ×1
daemon ×1
es6-promise ×1
exception ×1
javascript ×1
jdbc ×1
polyfills ×1
promise ×1
python ×1
try-catch ×1
typescript ×1