Tag: exception处理

在Java中始终抛出相同的exception实例

总是告诉我Javaexception处理非常昂贵。 我问在程序开头创建特定类型的exception实例是否是一个好习惯,而不创建新的exception实例,总是抛出相同的exception对象。 我只想举个例子。 常用代码: if (!checkSomething(myObject)) throw new CustomException(“your object is invalid”); 替代方案: static CustomException MYEXP = new CustomException(“your object is invalid”); //somewhere else if (!checkSomething(myObject)) throw MYEXP; 当然,我在这里做一些假设: MyCustomException没有参数 客户端代码,无论何时是一种良好的实践,都是基于exception处理的重量级,并且重构不是一种选择。 所以问题是: 这是一个好习惯吗? 这会损害一些JVM机制吗? 如果1为是,则有可能获得性能提升? (我想不是,但不确定) 如果1和3是肯定的,为什么不赞助作为练习? 如果1不是,为什么Martin Odersky在他对Scala的介绍中告诉我这是Scala在某些情况下的工作原理? (在28:30分,他告诉说实施rest已经抛出exception,观众说这很费时间并且他回复说每次都不会创建例外) Fosdem 2009 我希望这不是一个闲置/愚蠢的问题,我对此很好奇。 我认为exception处理的实际成本是处理而不是创建。 编辑添加了关于FOSDEM演示的精确讨论的参考 免责声明:我的代码没有像提议的那样工作,我无意管理这样的exception,我只是在做一个“假设”问题,而这种好奇心是从video的肯定中产生的。 我想:如果在Scala中完成,为什么不在Java中呢?

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

我何时应该使用代码段A而不是代码段B(即使用代码段A的好处是什么)?: 片段A: try { // codeblock A } catch (Exception ex) { // codeblock B } finally { //codeblock C } 代码片段B: try { // codeblock A } catch (Exception ex) { // codeblock B } //codeblock C

例外,以及重置连接时如何最好重试?

我有一些代码连接到URL以下载文件,然后对其执行一些处理。 但是,有时我收到错误java.net.SocketException: Connection reset 。 我想在收到此错误时重试下载该文件,在放弃之前最多说3次。 我想知道什么是最好的结构方式。 以下是否正常。 将try-catch块放在while循环中似乎可以接受,还是有更好的方法? 非常感谢所有帮助! while(!connected && retries > 0) { retries–; URL downloadUrl; URLConnection conn; try { downloadUrl = new URL(url); conn = downloadUrl.openConnection(); conn.connect(); connected = true; // Perform processing on downloaded file here } catch (IOException e) { Logger.batchLog(e); } }

@ControllerAdvice Not Firing

我正在开发一个Spring MVC / Webflow应用程序(版本3.2)并试图让exception处理工作,我可以将自定义exception消息输出到日志文件和error.jsp。 我遇到的问题是exception处理程序没有被解雇。 我创建了下面的类,并将其注释为“ @ControllerAdvice ”,并将其放入与我的控制器相同的包中抛出exception: @ControllerAdvice public class MyCustomExceptionController { @ExceptionHandler(MyCustomException.class) public ModelAndView handleMyException(MyCustomException ex) { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName(“/error/error”); modelAndView.addObject(“errorId”, ex.getErrorId()); modelAndView.addObject(“message”, ex.getErrorMessage()); return modelAndView; } } 并将以下内容添加到mvc-config文件中: 并在我的app-config文件中包含以下内容: 任何想法为什么这不起作用?

Java中的类IOException是否是未经检查的RuntimeException?

您是否同意Java类java.io.IOException的设计者应该使它成为从java.lang.RuntimeException派生的未经检查的运行时exception,而不是仅从java.lang.RuntimeException派生的已检查exception? 我认为类IOException应该是一个未经检查的exception,因为应用程序几乎无法解决文件系统错误等问题。 但是, 当你不能抛出exception时 , Elliotte Rusty Harold声称大多数I / O错误是暂时的,所以你可以在放弃之前多次重试I / O操作: 例如,IOComparator可能不会出现I / O错误,但是 – 因为许多I / O问题是暂时的 – 您可以重试几次,如清单7所示: 通常情况如此吗? Java应用程序可以纠正I / O错误还是等待系统恢复? 如果是这样,那么检查IOException是合理的,但如果不是这样,则应取消选中IOException,以便业务逻辑可以将此exception的处理委托给单独的系统error handling程序。

检查某个exception类型是否是嵌套exception中的原因(原因等等)的最佳方法?

我正在编写一些JUnit测试,以validation是否抛出了类型MyCustomException的exception。 但是,此exception多次包含在其他exception中,例如InvocationTargetException,而InvocationTargetException又包含在RuntimeException中。 什么是确定MyCustomException是否以某种方式导致我实际捕获的exception的最佳方法? 我想做这样的事情(见下划线): try { doSomethingPotentiallyExceptional(); fail(“Expected an exception.”); } catch (RuntimeException e) { if (!e. try { doSomethingPotentiallyExceptional(); fail(“Expected an exception.”); } catch (RuntimeException e) { if (!e. e.wasCausedBy (MyCustomException.class) fail(“Expected a different kind of exception.”); } (MyCustomException.class) fail(“Expected a different kind of exception.”); } 我想避免调用getCause()一些“层”深层,以及类似的丑陋的解决方法。 有更好的方式吗? (显然,Spring有NestedRuntimeException.contains(Class) ,它可以做我想要的 – 但我没有使用Spring。) 关闭:好的,我想有一个实用方法真的没有绕过:-)感谢所有回复的人!

如何使用Spring Data Rest和PagingAndSortingRepository处理exception?

假设我有一个类似的存储库: public interface MyRepository extends PagingAndSortingRepository { @Query(“….”) Page findByCustomField(@Param(“customField”) String customField, Pageable pageable); } 这很好用。 但是,如果客户端发送已形成的请求(例如,搜索不存在的字段),则Spring将exception作为JSON返回。 揭示@Query等 // This is OK http://example.com/data-rest/search/findByCustomField?customField=ABC // This is also OK because “secondField” is a valid column and is mapped via the Query http://example.com/data-rest/search/findByCustomField?customField=ABC&sort=secondField // This throws an exception and sends the exception to the client http://example.com/data-rest/search/findByCustomField?customField=ABC&sort=blahblah 抛出exception并发送给客户端的示例: […]

Jax-RS(Jersey)上下文中的WebApplicationException和WebServiceException之间的区别

我正在创建一个Jersey Web服务,我发现自己使用了两种提到的exception类型。 WebServiceException的构造函数允许您传递String作为WebApplicationException允许传入HTTP状态代码的原因。包括构造函数差异,具有这两种exception类型的目的是什么? 谢谢。

在Java中断言exception,如何?

这可能是一个概念上愚蠢的问题,但也可能没有,因为我还是学生,我想我应该没问题。 想象一下,如果给定某些条件,它将抛出一个NumberFormatException。 我想编写一个unit testing来查看exception是否正确。 我怎样才能做到这一点? PS我正在使用JUnit编写unit testing。 谢谢。

用运行时exception替换已检查的exception?

鉴于我基本上想要消除已检查的exception使用并将它们转换为运行时exception,我通常会做这样的事情: try { file.read(); } catch (IOException e){ throw new RuntimeException(e); } 这样做有几个缺点,但最让我烦恼的是我的运行时exception将包含嵌套的堆栈跟踪。 基本上我想将“IOException”作为RuntimeException(或“IORuntimeException”)重新抛出原始消息和stacktrace,这样我就可以避免无用的嵌套堆栈跟踪。 我在中间某处重新抛出exception的“事实”对我来说似乎只是无用的噪音。 这可能吗 ? 有没有这样做的图书馆?