19得票4回答
为什么编译器允许在方法永远不会抛出异常的情况下使用throws关键字?

我想知道为什么Java编译器允许在方法声明中使用throws,即使该方法永远不会抛出异常。因为"throws"是处理异常的一种方式(告诉调用者去处理它)。 由于处理异常有两种方式(throws和try/catch)。在try/catch中,它不允许捕获try块中未抛出的异常,但是它允许在可能...

19得票3回答
为什么在这种情况下允许抛出已检查异常类型?

我偶然发现这个throw语句(从一些更复杂的代码中提取)可以编译: void foo() { try { } catch (Throwable t) { throw t; } } 在短暂但愉快的一刻,我认为已经有人决定彻底消除检查异常,但它仍然在...

18得票1回答
Kotlin为什么移除了checked exceptions?其背后的理念是什么?

当我们在 Java 中调用一个会抛出异常的方法时,该怎么处理呢? 我的代码是用 Kotlin 写的,我正在使用一个用 Java 编写的第三方库。我调用这个库的一个方法,在某些情况下会抛出一些自定义的异常。现在 Kotlin 不强制我处理这些异常,否则应用程序将崩溃。最好的处理方式是什么?

17得票1回答
子类的catch块能捕获已检查的父异常吗?

我有一个带有已检查异常的方法,它属于一个父类,并且可以抛出父类和子类类型的异常。public void method() throws ParentException { if( false ) throw new ParentException(); else if( tru...

16得票7回答
已检查异常 vs 未检查异常

以下引用的意思是什么? 然而,对于未经检查的异常,编译器不会强制客户端程序员捕获异常或在throws子句中声明异常。实际上,客户端程序员可能甚至不知道异常可能被抛出。例如,由String的charAt()方法抛出的StringIndexOutOfBoundsException。 根据该...

14得票5回答
在构造函数中处理Java异常,同时使用final成员变量

我有一些丑陋的代码,想要进行重构:public class UdpTransport extends AbstractLayer<byte[]> { private final DatagramSocket socket; private final InetAdd...

13得票1回答
好的模式?<X扩展异常> ... 方法() 抛出 X

有一些背景知识,然后是一些问题。 我最近才发现一个接口(或类)可以在其方法可能抛出的已检查异常类型上是泛型。例如:interface GenericRunnable&lt;X extends Exception&gt; { void run() throws X; } 关键在于,如果...

12得票4回答
如何在Iterable.forEach中处理IOException?

我正在尝试将一组对象写入文件的方法。为什么下面使用Iterable.forEach()实现不能编译?在Eclipse中,我收到消息说未处理IOException。这特别令人困惑,因为我似乎正在处理IOException。 public void write(Iterable&lt;?&gt;...

10得票4回答
理解已检查和未检查异常有困难

我已经阅读了所有关于如何使用已检查和未检查异常的内容,但仍然不理解。我认为我仍然无法掌握概念。在StackOverflow上我看到说相较于已检查异常,使用未检查异常更好,但是Eclipse强制我使用已检查异常,例如FileNotFoundException(据我所知,如果Eclipse强制我插...

10得票3回答
如何在Java 6中捕获所有选中的异常(在单个块中)?

重要提示:此问题仅涉及Java 6(及以下版本)。 这里的层次结构显示了Java Exception被分为两种类型:RuntimeException和[非RuntimeException]: 将它们划分为类似于UncheckedException 和 CheckedException这...