问题标签 [try-finally]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1383 浏览

c++ - C++ 如何在不尝试 {} finally{} 的情况下安全地关闭文件?

假设这样一个类:

如果发生某些事情,close() 永远不会调用它。正确的是使用 try - finally,但 C++ 不支持它:

我怎样才能在 C++ 上做到这一点?

0 投票
1 回答
2347 浏览

java - 如何在 while 循环中安全地使用信号量?

在下面的代码片段中,我使用信号量来同步对某些资源的访问。

将获取/释放周期包含在 try/finally 中可能是合理的。鉴于 while 循环的存在,我该怎么做?

0 投票
5 回答
74 浏览

java - 关于 finally 块

我知道finally的目的是保证某些指令或清理代码得到执行。但是finally在 catch 块之后使用或放置代码的实际区别是什么。
我的意思是,给我一个你需要使用的例子,finally否则代码可能根本无法执行。

0 投票
2 回答
129 浏览

java - 在 try/finally 中,try 中的内容是否重要?

有什么功能上的区别吗?

对比

对比

我觉得他们在所有情况下都会做同样的事情

0 投票
2 回答
1430 浏览

java - try-finally 块的单元测试

我应该如何为该getUrl方法编写测试?

在上面的代码urls中是一个字符串数组。

主要问题是我应该如何测试case VALUE_3:

因为第一次测试,index = 0但之后的值index将更改为块中的其他值,我想在同一个单元测试类finally中用新值再次测试它。index

0 投票
1 回答
9200 浏览

c# - 在 try-finally 块中等待

我一直在玩 Visual Studio 14 CTP 2。这个版本的 C# vNext 允许在awaitfinally 块中使用关键字。

我试图弄清楚这是如何实现的。我知道这是一个实现细节,在 RTM 版本发布之前可能会发生变化,但我仍然不得不为这个功能选择我的大脑。

为了尝试理解底层编译器生成的代码,我创建了这个示例代码:

这是编译器生成的类:

据我了解,编译器正在获取finally代码块并将其移动到编译器生成catch块之后。如果我们想要await在 C# 6.0 之前完成某些事情,我们必须做的事情类似。

我看到一些我不明白的事情:

  1. 编译器以 obj2 异常的形式添加生成的catch块(在我的方法中不存在)catch (object obj2)并将其内部设置object为 obj2 异常。我不明白为什么要这样做。

  2. 我创建的finally块不再存在。这是否意味着块awaited内的任何代码finally都不能“享受”我们从实际将代码放入这样的块中获得的保证?

0 投票
3 回答
143 浏览

java - try 和 finally 给出没有返回语句的异常,但是在方法中写入返回语句时没有异常

请解释为什么异常出现在第一个程序中而不是在第二个程序中。

1) read 方法中没有返回语句

2)在读取方法中带有返回语句

0 投票
2 回答
454 浏览

intersystems-cache - Caché ObjectScript 中的 Try-Finally 等效

我正在寻找与流行的 Try-Finally 异常清理模式等效的语义,例如为什么使用 try ... finally 而不使用 catch 子句?

这个想法是,无论代码是成功还是失败,您都有需要执行的清理步骤,但清理代码不应干扰报告和处理错误。仍然出现问题,异常应该仍然传播。

我想写这样的东西:

但是 ObjectScript 中的 TRY...CATCH 语法不支持 FINALLY 子句。

尤其重要的是,通常由 finally 块完成的这两件事都是正确的:

  • 清理代码总是在执行返回给调用者之前运行,无论是在发生错误时还是在一切正常运行时。
  • 如果发生错误,原始错误及其代码位置、上下文和堆栈将通过调用堆栈传播到原始调用者。清理代码不应干扰调试。

我不能简单地使用常规的 TRY...CATCH 块,因为 CATCH 会吃掉异常并阻止正确的错误上下文向上传递。也许有一种方法可以在不弄乱错误上下文的情况下重新抛出原始异常?

0 投票
1 回答
102 浏览

java - 用户输入在 java 线程中不起作用。我究竟做错了什么?

好的,我正在尝试制作一个简单的聊天服务器和客户端。这个程序是聊天服务器。我有两个正在运行的线程。第一个线程处理所有客户端并使用 ServerSocket 将每个新客户端绑定到一个新套接字,第二个线程现在允许用户向连接的客户端发送消息。但是,我无法从该线程中获取用户输入!语句“String inputvar = br.readLine()”不会执行!我究竟做错了什么?

0 投票
1 回答
70 浏览

c# - 如何查找没有 catch 块的 try 块?

我有一个没有标准错误处理方法的大型解决方案。最近我发现很多方法都有 try/finally 阻塞。没有捕获块。我是如何发现所有这样的事情的?