jjzjj

java - finally block 和线程挂起

我注意到,在Java中,如果当前线程在tryblock中暂停,则相应的finallyblock不会被执行,例如Semaphorelock=newSemaphore(0);try{lock.acquire();}finally{//dosomething}这个观察是否可以推广到线程挂起,即Oracle文档所说的它只能用于绕过return、break和是真的吗继续?甲骨文文档。说:Butfinallyisusefulformorethanjustexceptionhandling—itallowstheprogrammertoavoidhavingcleanupcodeaccidental

java - 如何避免 finally block 中的 throw 子句

我使用SonarQube来提高代码质量。我遇到了一个与异常处理相关的问题,它说从finallyblock中删除throw子句。}catch(Exceptione){thrownewMyException("requestfailed:",e);}finally{try{httpClient.close();}catch(IOExceptione){thrownewMyException("failedtocloseserverconn:",e);}}根据我的理解,上面的代码看起来不错。如果我在finally中删除throw子句并抑制异常,则此方法的调用者将无法知道服务器的状态。我不确定

Java try-finally 竞争条件?

很多Java资源使用示例如下所示:Resourcer=openResource();try{//useresource}finally{r.close();}r的声明必须在try子句之外才能在finally子句中可见,但这也使得看起来可能存在竞争条件:如果在openResource()调用和进入try子句之间出现线程中断怎么办?这是否意味着资源不会在那种情况下实际上被关闭?或者Java是否保证try-finally会“完全”覆盖r,尽管语法看起来不会?或者我必须写:Resourcer=null;try{r=openResource();//useresource}finally{if(

java - finally 在嵌套的 try/catch 中放在哪里?

finally如何在嵌套的try/catch中工作?例如。对于:try{//code}catch(SomeExceptione){//codetry{//code}catch(OtherExceptione){//code}}catch(SomeOtherExceptione){//code}放置finally的最佳位置在哪里?或者我应该把它放在嵌套和外部try中吗? 最佳答案 如果您希望finallyblock中的代码无论在任何一个block中发生什么都运行,请将其放在外部try中。如果您只希望它在第一个tryblock中无论发生

java - 最后关闭连接和声明

哪个更适合finallyblock:finally{try{con.close();stat.close();}catch(SQLExceptionsqlee){sqlee.printStackTrace();}}或者:finally{try{if(con!=null){con.close();}if(stat!=null){stat.close();}}catch(SQLExceptionsqlee){sqlee.printStackTrace();}} 最佳答案 更好的使用方法是第二种,因为如果在初始化con或stat时抛出异常

java - 在Java中将一个文本文件的内容复制到另一个文本文件

我正在尝试将一个包含2-3个整数(例如:123)的文本文件(“1.txt”)的内容复制到另一个文本文件(“2.txt”),但我正在编译时出现如下错误importjava.io.*;classFileDemo{publicstaticvoidmain(Stringargs[]){try{FileReaderfr=newFileReader("1.txt");FileWriterfw=newFileWriter("2.txt");intc=fr.read();while(c!=-1){fw.write(c);}}catch(IOExceptione){System.out.println(

java - 在 Eclipse 中按下停止按钮时,finally() 会被调用吗?

我确定这个问题之前已经在这里问过,但是在谷歌和这里搜索之后我找不到任何东西。这是我的情况,我有多个线程写入一个文件,一个主线程创建一个打印编写器并处理创建文件并在try/catch循环中的finallyblock内关闭打印编写器。当我在eclipse中运行该应用程序时,我会按下停止/终止按钮,并且该文件没有写入任何内容。我想确保我在这里所做的一切都是正确的,或者是否有更好的方法来在执行终止时处理关闭打印编写器。哎呀,如果有更好的方法来处理多个线程写入一个文件,我欢迎您提出这个建议(我现在的多线程编程非常糟糕)。 最佳答案 final

java - "Syntax error, insert "Finally"to complete TryStatement"是什么原因

我正在使用eclipse创建一个android应用程序,该应用程序获取手机上所有当前显示的应用程序的列表,但我收到一个我以前从未见过的错误。我的代码看起来是正确的,但在其中一个“}”括号中出现错误“语法错误,插入“最后”以完成TryStatement”,有人知道如何解决此错误吗?谢谢。 最佳答案 您需要有一个“catch”子句或一个“finally”来伴随您的尝试:try{//...somethingdangerous...}catch(IOExceptione){//...handleerrors...}finally{//...

java - 最终阻塞在守护线程中

我知道守护线程中的finallyblock不会被执行。但是我一丝不苟的本性试图理解为什么以及在JVM中发生的事情如此特殊以至于它无法调用此block下的代码。我认为它在某种程度上与无法展开的调用堆栈有关,但不知道如何展开。有人可以对此有所了解吗?谢谢。 最佳答案 谁说守护线程中的finallyblock不执行?一般来说,这不是正确的。您可能听说在执行try期间关闭JVM时,不能保证执行finallyblock>(或catch)block。这是正确的(守护线程很容易发生这种情况)。但同样:在正常操作期间,没有什么可以阻止finally

java - finally子句java中的break语句

publicclassFinallyTest{staticinti=0;publicstaticvoidmain(Stringa[]){while(true){try{i=i+1;return;}finally{i=i+1;break;}}System.out.println(i);}}在上面的代码中输出是'2'。我所期待的是什么都不应该被打印出来。“break”在这里到底做了什么?请解释。谢谢 最佳答案 finally子句更改了try子句的“完成原因”。详细解释参见JLS14.20.2-Executionoftry-catch-f