gpt4 book ai didi

java - 异常处理什么时候用catch,什么时候用throws

转载 作者:行者123 更新时间:2023-11-29 09:29:39 26 4
gpt4 key购买 nike

问题不在于异常处理语法,而在于在通过传播方法处理异常的过程中,哪个是为异常编写 catch block 的正确位置。

public boolean validateUser(String username, String password) throws SQLException {
Connection conn = dataSource.getConnection();
boolean result = false;
PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM USERS WHERE USERNAME=? AND PASSWORD=?");
pstmt.setString(1, username);
pstmt.setString(2, password);
result = pstmt.executeQuery().next();
conn.close();
return result;
}

假设 method1() 调用了 method2() 并且 method2() 调用了上面的方法。在上面的方法中,如果我处理异常,我必须返回一个值。假设我在 catch block 后返回了 falsemethod2() 会产生用户名或密码错误之类的误解。

如果我不处理,method2() 将不会收到任何值,它的 catch block 将执行,同样的问题会出现在 method1() 中。

现在你能定义我在哪里可以有效地处理异常吗?

最佳答案

只有当您可以合理地从错误情况中恢复时,您才应该捕获异常。在所有其他情况下,您应该将它传播给您的调用者并希望他能够以有意义的方式处理它。如果调用堆栈上层没有人能够处理它,终止应用程序可能是正确的做法。

假设您正在编写一个带有图标的图形用户界面。你有一个方法

Icon loadIcon(String filename) throws IOException;

从磁盘文件加载图标的图像。如果此 I/O 操作失败,loadIcon 无法从该错误中恢复。最好让异常传播。

在其他地方,你有另一种方法

void buildGUI();

填充用户界面。它将利用 loadIcon 根据当前选择的图标主题获取各种按钮的图标。如果加载一个图标失败,这将是导致整个 GUI 构建过程崩溃的一个糟糕理由。在这里,我们可能应该捕获异常并尝试使用后备图标或显示一个空按钮。这将允许用户继续使用该应用程序,并可能意识到某些图标丢失,因此去修复他们的安装。

关于java - 异常处理什么时候用catch,什么时候用throws,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25735922/

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