问题标签 [checked-exceptions]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
643 浏览

java - 从静态块中抛出已检查的异常

当我尝试出现以下编译错误时,我想从静态块中抛出已检查的异常:

我的静态代码块如下:

如果这在java中是不允许的,我可以做些什么来从静态块中抛出一个检查的异常,换句话说,我怎么能在调用main方法之前做到这一点?谢谢。

0 投票
1 回答
34 浏览

java - 了解捕获检查的异常

我正在阅读 J. Bloch 的 Effective Java,现在我正在阅读有关已检查/未检查异常的部分。他说(强调我的):

通过让 API 用户面对已检查的异常,API 设计者提出了从条件中恢复的任务。用户可以通过捕获异常并忽略它来忽略授权,但这通常是一个坏主意(第 65 条)。

现在,考虑一个返回具有相同类型或子类型的类的所有静态数据成员列表的方法:

问题是我不知道应该在异常处理程序中放什么。我在 if 条件下执行访问检查:

因此IllegalAccessViolation永远不会被抛出。IllegalAccessViolation此外,为什么要检查似乎有点困惑。我认为这是一个编程错误,根据他的话来判断:

对可以合理预期调用者恢复的条件使用检查异常

[...]

使用运行时异常来 指示编程错误

我虽然它应该是一个不受约束的。

问题:如果我们确保永远不会在某个地方抛出异常,那么将已检查异常的处理程序留空是否合适?

0 投票
1 回答
63 浏览

java - 如何解决这些异常?

公平地说,我没有得到这些例外,而只是试图找到一个解决这些例外的方法。例外是 NosuchElementException 和 NumberFormatException。

注意:这个程序运行良好,因为 txt 文件很好。但是,引入任何不是数字的东西都会失败。

这是可能发生问题的主要类:

BankReader.java

这是我正在使用的 txt 文件:

因此,即使这是我自己的 txt 文件,如果我访问的文本文件中的字符不是数字或有帐号但没有余额,反之亦然。我想知道如何处理这些异常。

我试过的:

我试图做 scan.nextLine() 以摆脱异常,但它只是引入了另一个异常。

我还尝试使用一种使用正则表达式来检查字符串是否为数字的方法。问题是我使用的变量不是字符串,我宁愿不创建更多检查。

在我看来,我不再做什么,发生异常后我无法恢复我的扫描仪。

0 投票
1 回答
143 浏览

java - 异常处理中的 Java 性能问题

我知道 Java 中的 Checked 和 Unchecked Exception。

在多层环境中,unchecked Exception 是否比checked Exception 有更好的性能?

0 投票
2 回答
340 浏览

java - 接口和异常

我正在阅读关于教程点的接口,并遇到以下内容:

“检查的异常不应在接口方法声明的实现方法或接口方法声明的子类之外的实现方法上声明。”

谁能向我解释这到底是什么意思?

0 投票
3 回答
4639 浏览

java - 在方法之外抛出异常 - Java

我是Java的初学者。

我将一个方法声明为public void method() throws Exception,但是每当我尝试使用 using 在同一类的另一个区域中调用该方法时method();,都会出现错误:

如何使用该方法而不会出现此错误?

0 投票
1 回答
3184 浏览

java - 编译错误:在相应的try语句体中永远不会抛出异常

为了更好地学习 Java,我一直在尝试理解异常处理。我不明白为什么以下代码无法编译。

编译器消息是:

在该try块中,方法 exTest.doExTest() 被调用。在这个方法中,我捕获了一个 InterruptedException,并在它的catch块中抛出了一个新的 StupidException。

那么为什么编译器说它没有被抛出呢?我错过了什么?任何专家可以帮我看看我的错误吗?

0 投票
3 回答
5591 浏览

java - 异常层次结构/try-multi-catch

有人能告诉我为什么第二个 catch 块不被编译器视为无法访问的代码吗?但在以下情况下:

第二个 catch 块被认为是不可达的?

毕竟,FileNotFoundException 属于 IOException,就像它属于 Exception 一样。

编辑请澄清:编译器将根据方法的 throws 子句知道方法引发了异常。但它可能不一定知道异常的具体类型(在该异常类别下)。因此,如果方法抛出异常“A”,编译器将不知道实际异常是“A”还是“A”的子类型,因为这仅在运行时确定。然而,编译器会知道不会抛出“X”类型的异常,因此为 X 提供 catch 块是错误的。这是正确的吗?

0 投票
2 回答
1833 浏览

java - IntelliJ:搜索已检查的异常,在方法签名中声明,但从未在正文中抛出

我在这里有一个相当简单的 IntelliJ/工具问题:
我目前正在处理一些遗留代码,并开始在这里和那里重做东西。我经常偶然发现的是方法签名中声明(检查)的异常,尽管这些异常从未在正文中抛出。
这些声明也不是由接口或类似的东西强制执行的,因为这个问题主要发生在 MVC 控制器中,显然总是被一遍又一遍地复制和粘贴。
我想知道是否有办法使用 IntelliJ 搜索此类声明的异常。
因为如果我把插入符号放在throws关键字它不会突出显示任何内容,因为从未抛出声明的异常,但编辑器也没有向我显示错误标记,我真的很感激
:) IntelliJ 中是否有启用此功能的选项或是否存在插件会做那份工作吗?

提前致谢。

0 投票
3 回答
6777 浏览

java - 为什么不抛出异常的代码允许捕获已检查的异常?

在 Java 中,抛出已检查异常(Exception或其子类型 - IOException、InterruptedException 等)的方法必须声明throws语句:

不声明throws语句的方法不能抛出已检查异常。

但是在安全方法中捕获已检查的异常在 java 中仍然是合法的:

实际上,没有。这有点好笑:编译器知道e不是检查异常并允许重新抛出它。事情甚至有点荒谬,这段代码无法编译:

第一个片段是提出问题的动机。

编译器知道不能在安全方法中抛出已检查的异常 - 所以也许它应该只允许捕获未检查的异常?


回到主要问题- 是否有任何理由以这种方式实现捕获检查的异常?这只是设计中的一个缺陷,还是我错过了一些重要因素——可能是向后不兼容?RuntimeException如果只允许在这种情况下被捕获,可能会出现什么问题?非常感谢示例。