深刻分析Java中的各類異常處置方法。本站提示廣大學習愛好者:(深刻分析Java中的各類異常處置方法)文章只能為提供參考,不一定能成為您想要的結果。以下是深刻分析Java中的各類異常處置方法正文
1. 調試追蹤代碼:
public static void enterTryMethod() {
System.out.println("enter after try field");
}
public static void enterExceptionMethod() {
System.out.println("enter catch field");
}
public static void enterFinallyMethod() {
System.out.println("enter finally method");
}
2. 拋出Exception,沒有finally,當catch趕上return
public static int catchTest() {
int res = 0;
try {
res = 10 / 0; // 拋出Exception,後續處置被謝絕
enterTryMethod();
return res; // Exception曾經拋出,沒有取得被履行的機遇
} catch (Exception e) {
enterExceptionMethod();
return 1; // Exception拋出,取得了挪用辦法並前往辦法值的機遇
}
}
後台輸入成果:
enter catch field 1
3. 拋出Exception,當catch體裡有return,finally體的代碼塊將在catch履行return之前被履行
public static int catchTest() {
int res = 0;
try {
res = 10 / 0; // 拋出Exception,後續處置被謝絕
enterTryMethod();
return res; // Exception曾經拋出,沒有取得被履行的機遇
} catch (Exception e) {
enterExceptionMethod();
return 1; // Exception拋出,取得了挪用辦法並前往辦法值的機遇
} finally {
enterFinallyMethod(); // Exception拋出,finally代碼將在catch履行return之前被履行
}
}
後台輸入成果:
enter catch field enter finally method 1
4. 不拋出Exception,當finally代碼塊外面趕上return,finally履行完後將停止全部辦法
public static int catchTest() {
int res = 0;
try {
res = 10 / 2; // 不拋出Exception
enterTryMethod();
return res; // 取得被履行的機遇,但履行須要在finally履行完成以後能力被履行
} catch (Exception e) {
enterExceptionMethod();
return 1;
} finally {
enterFinallyMethod();
return 1000; // finally中含有return語句,這個return將停止這個辦法,不會在履行完以後再跳回try或許catch持續履行,辦法到此停止
}
}
後台輸入成果:
enter after try field enter finally method 1000
5. 不拋Exception,當finally代碼塊外面趕上System.exit()辦法將停止和終止全部法式,而不只是辦法
public static int catchTest() {
int res = 0;
try {
res = 10 / 2; // 不拋出Exception
enterTryMethod();
return res; // 取得被履行的機遇,但因為finally曾經終止法式,前往值沒無機會被前往
} catch (Exception e) {
enterExceptionMethod();
return 1;
} finally {
enterFinallyMethod();
System.exit(0); // finally中含有System.exit()語句,System.exit()將加入全部法式,法式將被終止
}
}
後台輸入成果:
enter after try field enter finally method
6. 拋出Exception,當catch和finally同時趕上return,catch的return前往值將不會被前往,finally的return語句將停止全部辦法並前往
public static int catchTest() {
int res = 0;
try {
res = 10 / 0; // 拋出Exception,後續處置將被謝絕
enterTryMethod();
return res; // Exception曾經拋出,沒有取得被履行的機遇
} catch (Exception e) {
enterExceptionMethod();
return 1; // Exception曾經拋出,取得被履行的機遇,但前往操作將被finally截斷
} finally {
enterFinallyMethod();
return 10; // return將停止全部辦法,前往值為10
}
}
後台輸入成果:
enter catch field enter finally method 10
7. 不拋出Exception,當finally趕上return,try的return前往值將不會被前往,finally的return語句將停止全部辦法並前往
public static int catchTest() {
int res = 0;
try {
res = 10 / 2; // 不拋出Exception
enterTryMethod();
return res; // 取得履行機遇,但前往將被finally截斷
} catch (Exception e) {
enterExceptionMethod();
return 1;
} finally {
enterFinallyMethod();
return 10; // return將停止全部辦法,前往值為10
}
}
後台輸入成果:
enter after try field enter finally method 10
結論
Java的異常處置中,法式履行完try外面的代碼塊以後,該辦法其實不會立刻停止,而是持續試圖去尋覓該辦法有無finally的代碼塊
假如沒有finally代碼塊,全部辦法在履行完try代碼塊後前往響應的值來停止全部辦法
假如有finally代碼塊,此時法式履行到try代碼塊裡的return一句之時其實不會立刻履行return,而是先去履行finally代碼塊裡的代碼
若finally代碼塊裡沒有return或沒有可以或許終止法式的代碼,法式在履行完finally代碼塊代碼以後再前往try代碼塊履行return語句來停止全部辦法。若 finally 代碼塊裡有 return 或含有可以或許終止法式的代碼,辦法將在履行完 finally 以後被停止,不再跳回 try 代碼塊履行 return
在拋出異常的情形下,道理也是和下面的一樣的,你把下面說到的 try 換成 catch 去懂得就OK了。