758得票21回答
Java中理解已检查异常和未检查异常

《Effective Java》中的Joshua Bloch说: 对于可恢复的情况使用checked异常,对于编程错误使用runtime异常(第2版的第58项)。 让我们看看我是否正确理解了这个概念。 这是我对checked异常的理解:try{ String userInput...

530得票33回答
反对使用可检查异常的理由

多年来,我一直无法得到一个合理的答案来回答以下问题:为什么有些开发人员如此反对checked exceptions?我进行过许多谈话,阅读了博客上的内容,并阅读了Bruce Eckel的言论(第一个公开反对它们的人)。 我目前正在编写一些新代码,并非常注意如何处理异常。我试图理解“我们不喜欢...

367得票18回答
如何在Java 8的lambda表达式/流中抛出已检查异常?

如何在Java 8的lambda表达式中抛出已检查异常,例如在流中使用? 换句话说,我想让这样的代码编译通过: public List<Class> getClasses() throws ClassNotFoundException { List<C...

267得票18回答
何时选择已检查和未检查异常

在Java(或其他具有已检异常的语言)中,当创建自己的异常类时,如何决定它应该是已检异常还是未检异常? 我的直觉是,在调用者可能可以以某种有益的方式恢复的情况下,应该使用已检异常,而未检异常则更适用于不可恢复的情况,但我很想听听其他人的想法。

133得票8回答
当调用一个函数时,为什么需要使用"throws Exception"?

class throwseg1 { void show() throws Exception { throw new Exception("my.own.Exception"); } void show2() throws Exception ...

71得票9回答
Java 8:Lambda表达式中强制检查异常处理。为什么是强制性的,而不是可选的?

我正在使用Java 8中的新lambda特性,并发现Java 8提供的实践非常有用。然而,我正在考虑是否有一种好的方法来解决以下情况。假设您有一个对象池包装器,需要某种工厂来填充对象池,例如(使用java.lang.functions.Factory): public class JdbcC...

38得票13回答
声明一个总是抛出异常的方法?

我有一个类似这样的方法:int f() { try { int i = process(); return i; } catch(Exception ex) { ThrowSpecificFault(ex); } } 这会产生一个编译错误,提示“并非所有的代...

35得票3回答
为什么允许捕获不会抛出异常的代码中的已检查异常?

在Java中,抛出已检查的异常的方法(Exception或其子类型 - IOException,InterruptedException等)必须声明throws语句: public abstract int read() throws IOException; 没有声明 throws 语...

34得票4回答
在Java中将受检异常包装为未受检异常?

我有这样一个Java中的工厂方法:public static Properties getConfigFactory() throws ClassNotFoundException, IOException { if (config == null) { InputSt...

33得票8回答
如何在Java中包装已检查异常但保留原始运行时异常

我有一些代码可能会抛出已检查异常和运行时异常。 我想捕获已检查异常并将其包装为运行时异常。但如果抛出RuntimeException,我不必包装它,因为它已经是运行时异常了。 我现在有一个解决方案,但有一些额外的开销,而且不太“整洁”:try { // some code that c...