java - 超过 2 层深度的嵌套方法中的异常处理
问题描述
假设我们有嵌套方法 A、B 和 C,如下所示:
public void A(){
try{
B();
}
catch(Exception e){
log.error(e);
}
}
public void B(){
C();
}
public void C(){
try{
some_stuff();
}
catch(Exception e){
log.error(e)
}
}
由于我在 C() 捕获异常并仅使用日志记录处理它,并且在 B() 中没有任何捕获,我是否在 A() 捕获异常?
或者我应该在 C() 处抛出异常并在 B() 处添加一个 try catch 以便能够在 A() 中处理它?
解决方案
当你这样做
public void C(){
try{
some_stuff();
}
catch(Exception e){
log.error(e)
}
}
这将在此时处理异常。您将记录它并忽略异常。如果要记录并传播它,则需要从catch
子句中重新抛出它。
由于检查了异常(据我所知),您需要更改方法签名以表明您是从C
.
在B
您不需要处理它时,您只需更改方法签名以指示该方法抛出异常。
阅读有关 Java 检查与未检查异常的更多信息,例如在此处输入链接描述
最后如果你想传播到A
代码会是这样的:
public void A(){
try{
B();
}
catch(Exception e){
log.error(e);
}
}
public void B() throws Exception{
C();
}
public void C() throws Exception{
try{
some_stuff();
}
catch(Exception e){
log.error(e)
throw e;
}
}
推荐阅读
- machine-learning - 使用深度学习识别文本序列中的子部分
- qt - 打破在线程中的 QObject 的插槽内调用的循环
- reactjs - 错误:不变量失败:您不应该使用
外面 当我在路由器上时(并且在本地主机上工作) - java - 正则表达式 (') 与 (,)
- asp.net-core - 我正在尝试向我的 API 写入一个 POST 请求,以便它可以作用于两个单独的对象(插入和更新)
- windows - 使用 curl 使用基本身份验证发送 GET 请求,其中密码以问号字符“?”开头
- windows - 为什么 WMI 在 \\root\SecurityCenter2 中显示相同 A/V 产品的重复条目?
- javascript - Axios - 显示验证返回的错误是 [object Object]
- sql - 防止影响特定行数的查询
- php - 将发布元键存储到数组中