有人可以解释我什么时候使用关键字 throw new 有用.而不是在方法的签名旁边使用抛出?
我知道当方法抛出Checked Exception时。Java迫使我们通过将Exception处理到try-catch块中,或者通过在签名旁边的关键字throws指定将在其他地方完成,从而直接在方法中处理它。
然而,我很难理解何时使用关键字throw new是有用的,以及为什么。它与处理未选中的异常有关吗?
例如在此示例中。为什么我们不在方法计算中抛出新的 ArithmeticException()?由于算术异常是一个未经检查的异常?我们不应该添加类似的东西吗:
private static int compute(int i) {
if(i == 0) {
throw new ArithmeticException();
}
return 1/i;
}
.
public class Main {
public static void main(String[] args) {
for (int i = -2; i < 2; i++) {
try {
System.out.println(i+" -> "+compute(i));
} catch (ArithmeticException e) {
System.out.println(i+" -> undefined")
}
}
}
private static int compute(int i) {
return 1/i;
}
}
< code>throws告诉其他人这个方法可以抛出异常。就当是文档吧。被检查的异常必须是方法签名的一部分。
< code>throw实际上会抛出异常。(< code >抛出新的异常();首先创建一个新的异常实例,然后引发该实例。您可以使用两个单独的语句:< code > Exception ex = new Exception();扔ex;)您可以使用< code>throw关键字引发已检查和未检查的异常。
void checked() throws Exception { // required, Exception is a checked exception
throw new Exception();
}
void unchecked() {
throw new RuntimeException(); // throws not required, RuntimeException is not checked
}
void checkedCall() throws Exception {
checked(); // throws required, because "checked" can throw a checked exception
}
void caught() {
try {
checked();
} catch (final Exception ex) {
// throws is no longer required, because the (checked) exception is handled within the method itself. It never leaves the method.
}
}
关于您更新的问题:您没有< code >抛出新的ArithmeticException,因为它是由JVM在尝试应用< code>/操作符时抛出的。如果你愿意,可以手动抛出,但那只是多余的代码。
无法弄清楚这是怎么回事-试图设置一个路由,只看到cxf连接到soap web服务(我不关心实际数据,也不期望数据实际“工作”,但它不断引发一个我不理解的异常: 我想知道我是否正确配置了它。我想这可能是一个丢失的jar,但当我尝试引入其他jar时,导致了依赖冲突 我正在使用maven依赖项“camel-cxf”来加载我所有的jar配置 “原因:org.apache.cxf.bus.extension
当变量d1和d2不是正确的数据类型时,我总是得到默认的NumberFormatExctive消息。 当使用throw语句条件捕捉到这些异常时,我想打印自定义异常消息。 } 这是输入值格式不正确时打印的消息示例。 输入一个数值:$Exception in thread“main”java。lang.NumberFormatException:用于java的输入字符串:“$”。base/jdk。内部的
我在视图中有一个ImageView,并尝试用它显示一个WritableImage实例。我正在外线程中绘制它,并通过侦听ObjectProperty的更改事件将其传递给视图。 imageView应该准备好接收图像,它由我的主视图显示。但是这是一个不合法的例外 线程“Thread-4”Java . lang . illegalstateexception中的异常:不在FX应用程序线程上;当前线程=线程
我正在用python运行下面的代码 我每次都会遇到下面的错误-有人能帮忙吗! OpenCV错误:未指定的错误(该函数未实现。使用Windows、GTK 2.x或Carbon支持重建库。如果您在Ubuntu或Debian上,请安装libgtk2.0-dev和pkg config,然后重新运行cmake或configure脚本),位于cvShowImage、file/Users/travis/buil
我有两个类(SimManager和Sim),我想为它们创建模拟对象,然后使用存根方法。 测试在上面第9行抛出这两个错误跟踪。 第一: Java语言lang.VerifyError:org/mockito/cglib/core/reflectils at org。莫基托。cglib。果心KeyFactory$发电机。在org上生成Class(KeyFactory.java:167)。莫基托。cgli
我有下面的代码,它按照预期工作: 我想知道是否有一种方法,只有一个orElseThrow-Part,或做它更少的冗余?