gpt4 book ai didi

java - 相应的 try block 中永远不会抛出异常

转载 作者:行者123 更新时间:2023-11-28 20:27:39 25 4
gpt4 key购买 nike

我有这个方法:

public int addInt(int x, int y){
try{
if(x<1 || y<1){
throw new InvalidValueExeption();
}
} catch(InvalidValueExeption i){
System.out.println(i);
}
return x+y;
}

InvalidValueExeption 是自定义异常。所以我想测试一下:

@Test
public void test(){
AddClass a = new AddClass();
boolean thrown = false;

try{
a.addInt(-2, 3);
} catch(InvalidValueException e){
thrown=true;
}

assertTrue(thrown);
}

我不能运行这个测试,因为它说 Exception exception.InvalidValueException is never throw in the corresponding try block

我做错了什么?

最佳答案

您的 addInt() 方法不会抛出 InvalidValueException (*)。在方法内部,你确实抛出了它,但在它“离开”你的方法之前你捕获了它。因此,对于外部世界,您的方法没有 InvalidValueException

然后,编译器正确地告诉您没有必要捕获 InvalidValueException

因此,与其立即在方法中捕获异常,不如声明抛出 InvalidValueException 的方法:

public int addInt(int x, int y) throws InvalidValueException {
if (x < 1 || y < 1) {
throw new InvalidValueException();
}
return x + y;
}

理由:

异常旨在告诉调用者 (**) 某些方法无法完成其任务,即您的 addInt() 方法旨在仅添加正数。如果有人用小于 1 的数字尝试它,该方法会返回异常而不是返回值,这样说:“嘿,出了点问题,所以我不能给你答案(问题描述是 [the异常及其消息等])。”


( * ) 我假设,缺少的“c”只是一个拼写错误,您没有两个不同的异常类。

( ** ) 这很重要。我不是在谈论 System.out.println(),因为它是在告诉用户,而不是调用者

关于java - 相应的 try block 中永远不会抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48583985/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com