gpt4 book ai didi

java - 方法的异常处理协议(protocol)

转载 作者:行者123 更新时间:2023-12-04 06:52:03 25 4
gpt4 key购买 nike

是否有任何特定的协议(protocol)来处理公共(public)方法中的异常?考虑这个,例如。

public int someMethod()
{
try{
code that might throw an exception
}
catch(Exception e)
{
log the exception
}
}

假设此方法可能会引发 ArrayIndexOutOfBoundsException。那么,在方法本身(如示例中)处理此异常或抛出它并假设调用方法将处理异常是否正确?

编辑:
进一步扩展我的问题。
考虑以下函数。
public int[] someMethod2()
{
try{
code that might throw an exception
}
catch(Exception e) {
log the exception
return new int[0];
}
}

如上面的示例代码,如果我返回一个大小为 0 的数组,那么调用方法将失败并出现 AraryIndexOutOfBounds 异常。如果我返回 null,那么调用方法将因 NullPointer 异常而失败。既然,我可以修改调用方法,哪种方式更好?我应该让调用方法失败吗?或者我应该直接在 someMethod2() 中调用 System.exit() 吗?

是否有解释这些决定的教程? This不给我答案。

最佳答案

一般来说,如果自己处理没有意义,就不要处理异常。 ArrayIndexOutOfBoundsException通常是编程错误的标志,如果您的应用程序包含编程错误,那么崩溃是正确且负责任的做法。

一个很大的禁忌是返回 null 而不是抛出异常,如下代码:

public Thing getThingById(long id) {
try {
ResultSet rs = queryDatabase("SELECT * FROM THING WHERE ID = " + id);
rs.next();
return new Thing(rs.get(1), rs.get(2), rs.get(3));
} catch (Exception e) {
return null;
}
}

现在,如果你得到 null从这个方法,你不知道为什么。身份证无效吗?数据库服务器宕机了吗?还是 queryDatabase 中的一些编程错误?方法?

编辑:哦,你永远不应该记录并重新抛出,它只会填满你的日志并使它们不可读。如果你重新抛出一个异常,很可能任何代码在调用链中进一步捕获它也会记录它

关于java - 方法的异常处理协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2979957/

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