草庐IT

Try-Except-Finally

全部标签

java - 在 Java 中检查代码中的异常或使用 try-catch 是更好的做法吗?

有人向我提到捕获所有异常不一定是好的做法(例如,NullPointerException)。我正在寻找关于何时这是一件好事、何时不是以及为什么这样的解释:D谢谢!!坏Pandas 最佳答案 简而言之:检查异常是为了捕获未经检查的异常和错误可以留待冒泡。(这些是RuntimeException和Error的子类)。这是因为已检查的异常是“预期的”并且程序可以从中恢复。未经检查的异常是程序无法(轻易)恢复的异常。Sun'stutorial说(它是关于决定你应该创建什么样的异常,但它在另一方面也提供信息-即当使用异常时):Here'sth

java - 如何避免在 Java 中有很多 try catch block

我对java和trycatchblock处理异常的想法还很陌生。这大致就是我要结束的,而且必须有更好的方法:try{JSONObjectjsonObject=newJSONObject(jsonString);intaCount=jsonObject.getInt("acount");StringdevTok=jsonObject.getString("dt");StringqURL=jsonObject.getString("qu");try{DatastoreServicedatastore=DatastoreServiceFactory.getDatastoreService()

java - “finally” block 对 “try” block 的返回值的影响

Thisquestionalreadyhasanswershere:Whydoeschangingthereturnedvariableinafinallyblocknotchangethereturnvalue?(7个答案)7年前关闭。我正在阅读此question,并且得到了以下代码片段:publicvoidtestFinally(){System.out.println(setOne().toString());}protectedStringBuildersetOne(){StringBuilderbuilder=newStringBuilder();try{builder.ap

java - 在 try-with-resources 声明期间抛出异常

假设我在Java中有以下try-with-resources语句:try(MyResourcemyResource1=newMyResource();MyResourcemyResource2=newMyResource()){//dostuff...}如果MyResourcemyResource2=newMyResource()抛出异常,是否保证myResource1.close()会被调用? 最佳答案 是的,这是有保证的。引自JLSsection14.20.3:Resourcesareinitializedinleft-to-r

java - 我们如何将 try finally 用于 Lock.lock 和 Lock.unlock

考虑以下代码。为了防止IndexOutOfBoundsException打电话时listIterator,我们使用读取器锁来检索基于索引的iteartor,并在对stockCodes进行写操作时使用写入器锁.请注意,我们没有使用任何锁定机制来使用listIterator进行迭代,因为它来自CopyOnWriteArrayList.不需要锁定,因为ConcurrentModificationException不应被抛出。//stockCodesReaderLockisreaderlockfromjava.util.concurrent.locks.ReadWriteLock//stock

java - 强制 try block 在两者之间中断的最佳方法是什么?

我有一个try-catchblock,我希望像switchblock一样break但我做不到找到推荐的方法。我在try-catchblock中获取大量数据,并希望在满足特定条件的情况下停止获取。只是为了让它现在工作,我故意强制代码进入catchblock:inti=0;try{//--dostuff----if(//-------isconditionmet?--------//)i=1/0;//divide1by0--adefiniteexception}catch(Exceptione){//---------donothing---------//}这样做安全还是我应该换一种方式

java - 如果构造函数抛出异常,是否不调用 try-with-resources 习惯用法的 close 方法?

我有一个基类Base和一个扩展它的子类Child。Base实现了java.lang.AutoCloseable。假设Child的构造函数抛出一个Foo。现在考虑try(Basec=newChild()){/*Somecode*/}catch(finalFooe){/*Somemorecode*/}如果抛出异常,是否调用Base#close方法?它不在我的机器上,但这是JLS标准化的东西吗? 最佳答案 是的,close不会被调用。这在JLSsection14.20.3中指定:Resourcesareinitializedinleft-

java - 在 try-with-resource 中手动关闭

假设我使用的是一个文档不完整的第三方库,没有可用的源代码。该库的一种方法接受InputStream来加载各种数据。由于缺少文档,不清楚该方法是否在完成处理后关闭流,因此一种可能的解决方案可能是将调用包装在try-with-resource中,只是为了在安全的一面。不幸的是,Java规范(据我所知)没有提及如果在try-with-resource中手动关闭资源会发生什么。有人碰巧知道吗? 最佳答案 这将完全取决于资源本身的实现。try-with-resource语句是用于在finallyblock中调用close()(并保留异常等)的

java - 在 finally block 中设置 reference = null?

我的一位同事在finallyblock中设置了对null的引用。我认为这是无稽之谈。publicSomethinggetSomething(){JDBCConnectionjdbc=null;try{jdbc=JDBCManager.getConnection(JDBCTypes.MYSQL);...}finally{JDBCManager.free(jdbc);jdbc=null;//你怎么看? 最佳答案 你是对的,jdbc是一个局部变量,所以当getSomething()方法返回时jdbc将超出范围并符合条件垃圾收集实际上与将其

java - 避免使用 try-catch 语句的充分理由

示例#1:try{fileChooser.setSelectedFile(newFile(filename));}catch(NullPointerExceptione){/*donothing*/}示例#2:if(filename!=null)fileChooser.setSelectedFile(newFile(filename));#1是出于性能或稳定性(或任何其他原因)本身就不好,还是只是有点不同?这不是一个很好的例子,因为#1与#2相比没有优势,但在不同的情况下可能会有优势(例如提高可读性、减少代码行等)。编辑:共识似乎是#1是一个禁忌。最常见的原因:开销另外,@RaphLe