标签: finally

如果在finally块中抛出异常,最终是否完全执行

所以我在这里有一些代码,我不确定如果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块中抛出异常会发生什么的细节.

提前致谢.

java exception finally bufferedreader

9
推荐指数
1
解决办法
2764
查看次数

Java中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)

java exception-handling finally

8
推荐指数
2
解决办法
1484
查看次数

最后在守护进程中阻塞

我知道最后在deamon线程中的块不会被执行.但是我一丝不苟地试图理解为什么以及JVM中发生的事情如此特殊以至于无法调用此块下的代码.

我认为它以某种方式与调用堆栈有关,它不能放松,但不知道如何.有人可以对此有所了解.谢谢.

java daemon finally

8
推荐指数
1
解决办法
2600
查看次数

收到Ctrl + C后,Python会执行finally块

如果你用Ctrl + C停止一个python脚本,它会执行任何finally块,还是它会在字面上停止脚本的位置?

python finally ctrl

8
推荐指数
3
解决办法
3336
查看次数

如何添加polyfill以支持Edge中的finally()?

我正在使用axios库并使用then(),catch()和finally().在Chrome中完美运行.但是finally()方法在MS Edge中不起作用.我研究过使用polyfills或垫片,我迷路了.我没有使用webpack或转换,也不打算添加它们.我需要保持这个简单.如何添加polyfill以确保finally()在Edge中有效?谢谢!

javascript finally promise polyfills

8
推荐指数
1
解决办法
1805
查看次数

如何正确处理ThreadInterruptedException?

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中?

谢谢!

.net exception-handling finally

7
推荐指数
1
解决办法
5919
查看次数

终于和最后没有什么区别?

有什么区别

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执行块.还有其他差异吗?

java finally

7
推荐指数
3
解决办法
1015
查看次数

最后关闭连接和声明

哪个更适合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 connection finally jdbc try-catch

7
推荐指数
3
解决办法
3万
查看次数

最后阻止和线程暂停

我注意到在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.说:

但最终不仅仅是异常处理有用 - 它允许程序员避免因返回,继续或中断而意外绕过清理代码.

java multithreading finally

7
推荐指数
1
解决办法
157
查看次数

最后,Promise类型中缺少属性

我很确定自己可以解决这个问题,但是如果它可以帮助其他人,我想分享并节省其他人的时间。

我必须添加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 typescript es6-promise

7
推荐指数
2
解决办法
5567
查看次数