在java中有可能重新抛出异常,但它有什么优势吗?
答案 0 :(得分:6)
当你想要重新抛出异常的一个例子是当你真的不知道如何自己处理它时,但你想记录抛出异常。重新调整它可以捕获您需要记录的堆栈信息,并将异常传递给调用堆栈以供调用者处理。
答案 1 :(得分:5)
不确定。如果您需要对异常执行一些特殊处理(日志记录,清理等),但无法完全“处理”它,则通常会进行处理,然后重新抛出异常。请注意,在许多情况下(特别是清理资源),您可能需要finally子句而不是catch / rethrow。
答案 2 :(得分:4)
有时,您希望方法抛出特定类型的Exception,但是很少有实例会导致在方法中抛出其他异常。我经常用我想要的Exception包含因果异常,然后重新抛出所需的异常。
如果在控件传递给调用方法(或其中一个祖先)之前无法确定异常导致操作失败,那么这非常有用,因为如果进程最终失败,我可以追溯到在堆栈跟踪中看到原因。
答案 3 :(得分:1)
我多年没有做过Java,但是从我记忆中看,它就像其他语言一样有异常和OO。异常可以是子类,通常,您需要捕获许多异常的基类,但可能无法处理所有异常。所以说你正在处理一个远程文件传输,并想要捕获所有IOErrors,因为你处理了大部分,但不是DiskFull。你可以重新抛出这个,让其他人在链上进一步处理它,但通过重新传输来处理其他问题,比如TransmissionFailed。
答案 4 :(得分:1)
如果你能以某种方式证明你需要重新抛出同样的异常,我认为你的设计有问题。
捕获一个异常并重新抛出另一个异常非常有意义。例如,您可能希望添加原始异常没有的详细信息。
答案 5 :(得分:1)
以下是我需要重新抛出java异常的一些真实情况:
public bizMethod() throws CoolBizLogicException {
int policyId = getPolicyId("bar");
try {
coolBizLogic(foobar); // this throws an exception
}
catch (CoolBizLogicException cble) {
cble.setPolicyId(policyId);
throw cble;
}
}
答案 6 :(得分:0)
我不这么认为。如果你无法处理它,就不要抓住它。