草庐IT

Try-Catch-Finally

全部标签

java - 我什么时候应该在 Java try-catch-finally 中使用 finally-block

我什么时候应该使用代码片段A而不是片段B(即使用片段A有什么好处)?:片段A:try{//codeblockA}catch(Exceptionex){//codeblockB}finally{//codeblockC}片段B:try{//codeblockA}catch(Exceptionex){//codeblockB}//codeblockC 最佳答案 如果您有无论是否抛出异常都必须执行的代码,请使用finallyblock。清理数据库连接等稀缺资源就是一个很好的例子。 关于java

java - 即使在 Junit 测试从 with in 'finally' block 中抛出断言错误后, 'try' block 是否会触发?

finally{}block中的writer.close()方法会在Junit断言错误上运行吗?假设以下代码:@TestpublicvoidtestWriter(){try{writer.open();finalListmyBeans=newArrayList();/**Add2beanstothemyBeansListhere.**/finalintbeansWritten=writer.writeBeans(myBeans);//Saythisassertionerrorbelowistriggeredorg.junit.Assert.assertEquals("Wrongnumb

java - 哪个更好/更有效 : check for bad values or catch Exceptions in Java

在Java中哪个更有效:检查错误值以防止异常或让异常发生并捕获它们?这里有两block示例代码来说明这种差异:voiddoSomething(typevalue1){ResultTyperesult=genericError;if(value1==badvalue||value1==badvalue2||...){result=specificError;}else{DoSomeActionThatFailsIfValue1IsBad(value1);//...result=success;}callback(result);}对比voiddoSomething(typevalue1)

java - 如果我在命令行中输入 Ctrl-C,Java 中的 finally block 还会执行吗?

我在Windows的cmd.exe中运行我的Java应用程序。如果我按Ctrl-C强行停止进程,而那一刻的代码正在tryblock中运行,finallyblock是否仍会执行?在我的测试中,是的,它似乎被执行了。 最佳答案 确保运行某些代码以响应操作系统信号(这是Ctrl-C所做的,它发送一个SIGINT)的正确方法是注册一个“shutdownHook”。这是一个StackOverflowquestion关于处理它,这里是anarticle关于JVM信号处理的详细信息比您可能想知道的要多得多。

java - try-catch 除以零

我的问题是关于简单除以零示例的try-catchblock。你看到第一行了吗?如果我将这两个变量中的任何一个转换为double,程序将无法识别catchblock。在我看来,无论我投还是不投,都必须执行catchblock。这段代码有什么问题?publicstaticvoidmain(String[]args){intpay=8,payda=0;try{doubleresult=pay/(double)payda;//ifIcastanyofthetwovariables,programdoesnotrecognizethecatchblock,whyisitso?System.out

java:如何声明一个在 try - catch block 中初始化的变量的 final?

我有一个变量在初始化后不应更改其值,因此我想将其定义为最终变量。问题是变量必须在tryblock中初始化,所以我遇到了以下麻烦:我有以下代码:Connectionconn=null;try{conn=getConn(prefix);[...dosomestuffwithconn...]}catch(Exceptione){thrownewDbHelperException("erroropeningconnection",e);}finally{closeConnection(conn);}如果我将variabale声明为final,但没有将其初始化为null,我会在finallybl

Java catch block ,捕获的异常不是最终的

我正在检查JavaSE7的新特性,我目前正处于这一点:http://docs.oracle.com/javase/7/docs/technotes/guides/language/catch-multiple.html关于catchmultiple特性,当我遇到这个语句时:Note:Ifacatchblockhandlesmorethanoneexceptiontype,thenthecatchparameterisimplicitlyfinal.Inthisexample,thecatchparameterexisfinalandthereforeyoucannotassignany

java 编译器说这个异常永远不会在相应的 try 语句的主体中抛出 - 但它_is_ 抛出

我有以下代码:try{//jaw-wsserviceportoperationport.login();}catch(Exceptione){logger.error("CaughtExceptioninlogin():"+e.getMessage());}当上面的命令使用不正确的主机名运行时,我得到:CaughtExceptioninlogin():HTTPtransporterror:java.net.UnknownHostException:abc这是正确的,也是意料之中的。我重写了专门捕获UnknownHostException的代码,如下:importjava.net.Unk

Java 异常 - 不使用 try catch 处理异常

在Java中,我们使用trycatchblock处理异常。我知道我可以编写如下所示的trycatchblock来捕获方法中抛出的任何异常。try{//dosomething}catch(Throwablet){}但是在Java中有没有什么方法可以让我在异常发生时调用一个特定的方法,而不是像上面那样编写一个包罗万象的方法?具体来说,我想在抛出异常(我的应用程序逻辑未处理)时在我的Swing应用程序中显示一条用户友好的消息。谢谢。 最佳答案 默认情况下,JVM通过将堆栈跟踪打印到System.err流来处理未捕获的异常。Java允许我们

Java 隐式 try-with-resources

我想知道以下代码是否正确使用了try-with-resources。try(ResultSetrs=newQueryBuilder(connection,tableName(),getPaths(),searchQuery()).add(constraint).build().executeQuery()){while(rs.next()){beans.add(createBean(rs));}}参数不重要,重要的是:newQueryBuilder().build();返回一个PreparedStatement。我完全理解rs将被关闭,但是PreparedStatement是否也会被关