假設我們有嵌套方法 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() 中處理它?
uj5u.com熱心網友回復:
當你做
public void C(){
try{
some_stuff();
}
catch(Exception e){
log.error(e)
}
}
這將處理此時的例外。您將記錄它并忽略例外。如果你想記錄并傳播它,你需要從catch子句中重新拋出它。
由于檢查了 Exception(據我所知),您需要更改方法簽名以指示您正在從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;
}
}
uj5u.com熱心網友回復:
您正在處理catch塊中的例外,因此它不會進一步傳播給呼叫者。這與您是在記錄它還是用它做任何其他事情無關。如果你想把它傳播給呼叫者,你需要重新拋出它:
[...]
catch (Exception e) {
// do something
throw e;
}
您如何處理例外取決于您的代碼設計。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/324110.html
上一篇:C中多層實作的錯誤處理
下一篇:“例外成功發送到服務器”事件
