Tag: checked exceptions

如何在java中识别已检查和未检查的exception?

在阅读关于exception的同时,我总会遇到检查exception和未经检查的exception,所以想知道如何区分哪个是什么? 编辑:我想知道我是否创建了任何exception类,那么我如何创建一个已选中或未选中? 每个人的意义是什么?

是不是在try块中捕获的未经检查的exception在Java中检查了exception?

有人告诉我,在Java中,未经检查的exception可以在try块中捕获,但如果它被捕获,是不是称为已检查exception?

当方法签名不允许抛出exception时,如何抛出exception?

我有这样的方法: public void getSomething(){ … } 我想在getSomething()抛出一个Exception 。 编译器不允许我这样做,因为我的方法不允许在那里抛出exception。 但我需要为我的测试抛出一个Exception的子类(我不能抛出Unchecked Exception ) 。 这显然是一个黑客,但我需要它进行测试。 我试过EasyMock,但它也不允许我这样做。 任何想法如何做到这一点? 谢谢,Sean Nguyen

如何决定创建已检查的excpetion或未经检查的exception

我想知道如何创建并抛出已检查的exception或未经检查的exception。 例如,我有一个服务,它使用一些数据并在使用之前validation它。 在validation期间,某个字段不符合规则,我想抛出一个exception,如ValidationException()。 我怎么知道应该检查或取消选中它。 在另一种情况下,我从我的代码中调用外部Web服务,例如google stock api。 我们假设我的超时时间为3秒。 如果时间exprires我想抛出exception说BackendException()。 我怎么知道它应该是一个已检查的exception还是一个未经检查的exception。 提前致谢。

为什么Java中的运行时exception“未经检查”?

为什么运行时exceptionUnChecked是有意义的 (而不是如果它们被检查 )?

番石榴缓存并保留已检查的exception

我正在重构一些使用番石榴缓存的代码。 初始代码: public Post getPost(Integer key) throws SQLException, IOException { return PostsDB.findPostByID(key); } 为了不破坏某些东西,我需要保留任何抛出的exception,而不包装它。 目前的解决方案看起来有些难看 public Post getPost(final Integer key) throws SQLException, IOException { try { return cache.get(key, new Callable() { @Override public Post call() throws Exception { return PostsDB.findPostByID(key); } }); } catch (ExecutionException e) { Throwable cause = e.getCause(); if (cause instanceof SQLException) […]

如何包装已检查的exception但在Java中保留原始运行时exception

我有一些代码可能会抛出已检查和运行时exception。 我想捕获已检查的exception并将其包装为运行时exception。 但是如果抛出RuntimeException,我不必包装它,因为它已经是运行时exception。 我的解决方案有点开销,并不“整洁”: try { // some code that can throw both checked and runtime exception } catch (RuntimeException e) { throw e; } catch (Exception e) { throw new RuntimeException(e); } 想要更优雅的方式吗?

从lambda抛出exception

鉴于此java 8代码 public Server send(String message) { sessions.parallelStream() .map(Session::getBasicRemote) .forEach(basic -> { try { basic.sendText(message); } catch (IOException e) { e.printStackTrace(); } }); return this; } 我们如何正确地将这个IOException委托给方法调用的堆栈? (简而言之,如何使此方法抛出此IOException ?) java中的Lambdas对error handling看起来不太友好……

服务层中的已检查与未检查的例外

我处理具有遗留服务层的项目,如果请求的记录不存在,则在许多地方返回null,或者由于呼叫者未被授权而无法访问。 我在谈论ID要求的特定记录。 例如,类似于: UserService.get(userId); 我最近推动改变这个API,或者补充一个抛出exception的新API。 关于已检查与未经检查的例外的争论随之而来。 从JPA / Hibernate等人的设计者那里得到一个注释,我建议未经检查的exception可能是最合适的。 我的论点是,无法合理地期望API的用户从这些exception中恢复,并且在99%的情况下,我们最多只能通知应用程序用户发生了一些错误。 将运行时exception传播到通用处理机制显然会减少处理边缘情况exception所涉及的大量复杂性和所需的分支处理。 但是,围绕这种方法存在很多问题(这是正确的)。 为什么选择JPA / EJB和Hibernate等项目的设计者使用未经检查的exception模型? 它有充分的理由吗? 有什么利弊。 使用这些框架的开发人员是否仍然可以使用适配器包装器之类的东西处理接近抛出它们的运行时exception? 我希望这些问题的答案可以帮助我们对自己的服务层做出“正确”的决定。

为什么在这种情况下允许抛出检查的exception类型?

我偶然注意到这个throw语句(从一些更复杂的代码中提取)编译: void foo() { try { } catch (Throwable t) { throw t; } } 对于一个短暂但快乐的时刻,我认为已经检查过的exception最终决定已经死了,但它仍然很高兴: void foo() { try { } catch (Throwable t) { Throwable t1 = t; throw t1; } } try块不必为空; 它似乎可以有代码,只要该代码不会抛出一个已检查的exception。 这似乎是合理的,但我的问题是,语言规范中的哪些规则描述了这种行为? 据我所知 , §14.18town语句明确禁止它,因为t表达式的类型是一个经过检查的exception,并且它没有被捕获或声明被抛出。 (?)