草庐IT

Try-Finally

全部标签

java - 最好在 try block 内有一个同步块(synchronized block),还是在同步块(synchronized block)内有一个 try block ?

例如,这样更好吗?try{synchronized(bean){//Writesomething}}catch(InterruptedExceptione){//Writesomething}或者这样更好:synchronized(bean){try{//Writesomething}catch(InterruptedExceptione){//Writesomething}}我想知道哪一个是最佳实践。显然考虑到我必须同步tryblock内的所有代码。我不是在谈论我只需要同步try内的部分代码的情况(在这种情况下,我认为在try内有同步块(synchronizedblock)会更好)。

java - 最好在 try block 内有一个同步块(synchronized block),还是在同步块(synchronized block)内有一个 try block ?

例如,这样更好吗?try{synchronized(bean){//Writesomething}}catch(InterruptedExceptione){//Writesomething}或者这样更好:synchronized(bean){try{//Writesomething}catch(InterruptedExceptione){//Writesomething}}我想知道哪一个是最佳实践。显然考虑到我必须同步tryblock内的所有代码。我不是在谈论我只需要同步try内的部分代码的情况(在这种情况下,我认为在try内有同步块(synchronizedblock)会更好)。

java - Java中try catch block 中变量 "scopes"的问题

谁能解释一下为什么在最后几行中,br未被识别为变量?我什至尝试将br放在try子句中,将其设置为final等。这与Java不支持闭包有什么关系吗?我99%确信类似的代码可以在C#中运行。privatevoidloadCommands(StringfileName){try{finalBufferedReaderbr=newBufferedReader(newFileReader(fileName));while(br.ready()){actionList.add(CommandFactory.GetCommandFromText(this,br.readLine()));}}catc

java - Java中try catch block 中变量 "scopes"的问题

谁能解释一下为什么在最后几行中,br未被识别为变量?我什至尝试将br放在try子句中,将其设置为final等。这与Java不支持闭包有什么关系吗?我99%确信类似的代码可以在C#中运行。privatevoidloadCommands(StringfileName){try{finalBufferedReaderbr=newBufferedReader(newFileReader(fileName));while(br.ready()){actionList.add(CommandFactory.GetCommandFromText(this,br.readLine()));}}catc

java - 关于嵌套 Java try/finally 代码三明治的建议

我想要一些关于我碰到的技术的建议。通过查看代码片段可以很容易地理解它,但我会在下面的段落中更多地记录它。使用“代码三明治”习语来处理资源管理是司空见惯的。习惯了C++的RAII习语后,我切换到Java,发现我的异常安全资源管理导致代码深度嵌套,在其中我很难掌握常规控制流。显然(javadataaccess:isthisgoodstyleofjavadataaccesscode,orisittoomuchtryfinally?、Javaiouglytry-finallyblock等等)我并不孤单。我尝试了不同的解决方案来解决这个问题:显式维护程序状态:resource1aquired、f

java - 关于嵌套 Java try/finally 代码三明治的建议

我想要一些关于我碰到的技术的建议。通过查看代码片段可以很容易地理解它,但我会在下面的段落中更多地记录它。使用“代码三明治”习语来处理资源管理是司空见惯的。习惯了C++的RAII习语后,我切换到Java,发现我的异常安全资源管理导致代码深度嵌套,在其中我很难掌握常规控制流。显然(javadataaccess:isthisgoodstyleofjavadataaccesscode,orisittoomuchtryfinally?、Javaiouglytry-finallyblock等等)我并不孤单。我尝试了不同的解决方案来解决这个问题:显式维护程序状态:resource1aquired、f

java - 为什么 Java 编译器复制 finally block ?

当使用简单的try/finallyblock编译以下代码时,Java编译器会生成以下输出(在ASM字节码查看器中查看):代码:try{System.out.println("Attemptingtodividebyzero...");System.out.println(1/0);}finally{System.out.println("Finally...");}字节码:TRYCATCHBLOCKL0L1L1L0LINENUMBER10L0GETSTATICjava/lang/System.out:Ljava/io/PrintStream;LDC"Attemptingtodivide

java - 为什么 Java 编译器复制 finally block ?

当使用简单的try/finallyblock编译以下代码时,Java编译器会生成以下输出(在ASM字节码查看器中查看):代码:try{System.out.println("Attemptingtodividebyzero...");System.out.println(1/0);}finally{System.out.println("Finally...");}字节码:TRYCATCHBLOCKL0L1L1L0LINENUMBER10L0GETSTATICjava/lang/System.out:Ljava/io/PrintStream;LDC"Attemptingtodivide

java - 是否可以在我进入 finally block 之前检测是否发生异常?

在Java中,是否有一种优雅的方法可以在运行finallyblock之前检测是否发生异常?在处理“close()”语句时,通常需要在finallyblock中处理异常。理想情况下,我们希望维护两个异常并将它们向上传播(因为它们都可能包含有用的信息)。我能想到的唯一方法是在try-catch-finally范围之外有一个变量来保存对抛出异常的引用。然后将“已保存”异常与finallyblock中发生的任何异常一起传播。有没有更优雅的方式来做到这一点?也许API调用会揭示这一点?这是我所说的一些粗略代码:Throwablet=null;try{stream.write(buffer);}c

java - 是否可以在我进入 finally block 之前检测是否发生异常?

在Java中,是否有一种优雅的方法可以在运行finallyblock之前检测是否发生异常?在处理“close()”语句时,通常需要在finallyblock中处理异常。理想情况下,我们希望维护两个异常并将它们向上传播(因为它们都可能包含有用的信息)。我能想到的唯一方法是在try-catch-finally范围之外有一个变量来保存对抛出异常的引用。然后将“已保存”异常与finallyblock中发生的任何异常一起传播。有没有更优雅的方式来做到这一点?也许API调用会揭示这一点?这是我所说的一些粗略代码:Throwablet=null;try{stream.write(buffer);}c