问题标签 [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.
java - 运行时/已检查/未检查/错误/异常之间的差异
什么是运行时异常,什么是检查/未检查异常以及错误/异常之间的区别。为什么有这么多类型?相反,Java 可能只是遵循一个简单的设计(只是尝试/捕获所有类型)来处理程序中的异常情况?
c# - 声明一个总是抛出异常的方法?
我有这样的方法:
这会产生编译器错误,“并非所有代码路径都返回值”。但在我的情况下 ThrowSpecificFault() 将始终抛出(适当的)异常。所以我被迫在最后放置一个返回值,但这很丑陋。
首先,这种模式的目的是因为“process()”是对外部 Web 服务的调用,但需要转换各种不同的异常以匹配客户端的预期接口(我想是外观模式)。
任何更清洁的方法来做到这一点?
java - scala 生成的字节码如何丢弃检查的异常?
如果可以为应该抛出检查异常的方法编写字节码?
例如,除非方法声明它抛出检查的异常,否则以下 Java 类不会编译:
虽然以下 Scala 等效项确实(因为 Scala 没有检查异常):
即使生成的字节码几乎相同:
问题:是否有可能(以及如何)生成不标记它的字节码,即使该方法中的代码没有处理它也会引发检查异常?
java - 已检查与未检查的异常
我研究过:但是,对于未经检查的异常,编译器不会强制客户端程序员捕获异常或在 throws 子句中声明它。事实上,客户端程序员甚至可能不知道异常可能会被抛出。例如,由 String 的方法StringIndexOutOfBoundsException
抛出。charAt()
这是什么意思?
根据该代码,无需将 try catch 块放入代码中,但我已经看到编译器强制将代码放入 try catch 块中。
我很困惑他们到底是什么?
java - 放宽异常捕获的必要性
Java 中是否有可能摆脱捕获非RuntimeException
异常的必要性?也许编译器标志?
我知道提升捕捉的原因,但想做简单而直接的工具来执行他们的要求。因此,如果出现问题,我不想赶上而是退出应用程序,并因有意义的异常而崩溃。通常这会像这样结束:
它引入了 4 行代码混乱,并RuntimeException
在错误输出中引入了包装混乱。有时它甚至会激发人们将大块包裹try ... catch (Throwable ..)
在任何东西上,这可能是我们心爱的“发生未知错误”警报框的原因......
java - 为什么要尝试/抓住可投掷的东西?
在尝试重构一些我的代码时,我试图在 catch 子句中抛出异常,如下所示 -
但是,当我尝试在“抛出异常”行上抛出异常时,编译器抱怨我需要在新的 try/catch 中将 throw 子句包围起来,就像这样 -
为什么编译器需要这个以及它提供什么用途?
谢谢
java - 了解 Java 中的已检查与未检查异常
Joshua Bloch 在“ Effective Java ”中说
对可恢复条件使用检查异常,对编程错误使用运行时异常(第 2 版第 58 条)
让我们看看我是否理解正确。
这是我对已检查异常的理解:
1.以上是否被视为已检查异常?
2. RuntimeException 是未经检查的异常吗?
这是我对未经检查的异常的理解:
4.现在,上面的代码不能也是检查异常吗?我可以尝试恢复这种情况吗?我可以吗?(注意:我的第三个问题在catch
上面)
5. 人们为什么要这样做?
为什么他们让异常冒泡?越早处理错误不是更好吗?为什么要冒泡?
6. 我应该冒泡确切的异常还是使用异常来掩盖它?
以下是我的阅读
java - 抛出检查异常
我在 Java 中的一些方法会抛出 NoSuchElementException、IllegalArgumentException 等异常。但是在使用这些方法时,这些异常似乎是未经检查的。换句话说,我的方法的调用者不需要对抛出这些异常的方法进行尝试/捕获。我读到似乎默认情况下异常是“检查”的,只有错误是“未检查”的。但不知何故,我抛出的异常也是未经检查的。真奇怪。
如何确保当我的方法抛出异常时,调用者必须在编译时捕获异常?简单地说,我怎样才能抛出一个已检查的异常?
谢谢!
exception - 如何找到被“忽略”的异常?
无需在 throws 子句中声明检查异常或在 scala 的 try/catch 块中处理它们是我喜欢的功能。但是当必须处理异常但被忽略时,这可能是一个问题。我正在寻找工具(可能是编译器标志/插件)来查找忽略检查异常的方法。
java - 服务层中已检查与未检查的异常
我在一个带有遗留服务层的项目上工作,如果请求的记录不存在,或者由于调用者未经授权而无法访问,该服务层会在许多地方返回 null。我说的是 ID 要求的特定记录。例如,类似:
我最近推动了这个 API 的更改,或者补充了一个引发异常的新 API。关于已检查与未检查异常的争论随之而来。
从 JPA/Hibernate 等的设计者那里注意到,我建议未经检查的异常可能是最合适的。我的论点是不能合理地期望 API 的用户从这些异常中恢复,并且在 99% 的情况下,我们最多只能通知应用程序用户发生了一些错误。
将运行时异常传播到通用处理机制显然会减少处理边缘情况异常所涉及的许多复杂性和所需的分支处理。但是,围绕这种方法存在很多担忧(这是正确的)。
为什么 JPA/EJB 和 Hibernate 等项目的设计者选择使用未经检查的异常模型?有很好的理由吗?有什么优点/缺点。使用这些框架的开发人员是否仍应使用适配器包装器之类的东西处理接近抛出异常的位置的运行时异常?
我希望这些问题的答案可以帮助我们对自己的服务层做出“正确”的决定。