一、內(nèi)層方法拋出異常,外層方法捕捉并處理異常:
public void methodA (){
try{
// 調(diào)用methodB
methodB();
}
catch(ExceptionType et){
// 相應(yīng)處理措施
}
}
public void methodB throws ExceptionType{
if (condition is true)
{
// 相應(yīng)處理措施
}
else
{
throw new ExceptionType(argument);
}
}
在這個(gè)例子中,方法B的頭部中聲明了該方法會(huì)拋出一個(gè)類型為ExceptionType的異常,在方法體中使用throw子句拋出了一個(gè)異常,那么該異常被誰捕捉到呢,答案是方法A。因?yàn)楫惓伋龊?,JVM會(huì)順著該方法的調(diào)用棧一層一層的往上找。因?yàn)榉椒ˋ中有一個(gè)catch(ExceptionType et),所以被拋出的異常會(huì)被捕捉到并處理。
二、方法中自己捕捉,處理異常:
public methodA() {
try
{
// 可能產(chǎn)生異常的語句
}
catch (ExceptionType et)
{
// 相應(yīng)的處理
}
}
在這個(gè)例子中,方法A使用了try-catch語句塊,那么意味著在方法中所產(chǎn)生的ExceptionType類型的異常都會(huì)被捕捉到并在方法內(nèi)處理。
三、內(nèi)層方法拋出一個(gè)異常,但本身又有try-catch
public methodB() throws ExceptionType{
try
{
// 可能產(chǎn)生異常的語句
}
catch (AnotherExceptionType aet)
{
// 相應(yīng)處理措施
}
}
在這個(gè)例子中有兩種異常處理情況,拋出異常和捕捉異常,如果在try語句塊中產(chǎn)生ExceptionType類型的異常的話,會(huì)被拋出。如果產(chǎn)生AnotherExceptionType類型的話,則不會(huì)被拋出,因?yàn)樵诜椒˙的頭部中并沒有聲明會(huì)拋出該異常。
四、內(nèi)層方法拋出一個(gè)異常,但本身有try-finally
public methodB() throws ExceptionType{
try
{
// 可能產(chǎn)生異常的語句
}
finally
{
// 一定要執(zhí)行的語句
}
}
這個(gè)例子與上一個(gè)例子很像,不同的是沒有catch,但增加了finally。它的意思如果方法B中try語句塊中如果產(chǎn)生了異常,則拋出由外層方法處理。然后方法B繼續(xù)執(zhí)行finally中的語句。
public void methodA (){
try{
// 調(diào)用methodB
methodB();
}
catch(ExceptionType et){
// 相應(yīng)處理措施
}
}
public void methodB throws ExceptionType{
if (condition is true)
{
// 相應(yīng)處理措施
}
else
{
throw new ExceptionType(argument);
}
}
在這個(gè)例子中,方法B的頭部中聲明了該方法會(huì)拋出一個(gè)類型為ExceptionType的異常,在方法體中使用throw子句拋出了一個(gè)異常,那么該異常被誰捕捉到呢,答案是方法A。因?yàn)楫惓伋龊?,JVM會(huì)順著該方法的調(diào)用棧一層一層的往上找。因?yàn)榉椒ˋ中有一個(gè)catch(ExceptionType et),所以被拋出的異常會(huì)被捕捉到并處理。
二、方法中自己捕捉,處理異常:
public methodA() {
try
{
// 可能產(chǎn)生異常的語句
}
catch (ExceptionType et)
{
// 相應(yīng)的處理
}
}
在這個(gè)例子中,方法A使用了try-catch語句塊,那么意味著在方法中所產(chǎn)生的ExceptionType類型的異常都會(huì)被捕捉到并在方法內(nèi)處理。
三、內(nèi)層方法拋出一個(gè)異常,但本身又有try-catch
public methodB() throws ExceptionType{
try
{
// 可能產(chǎn)生異常的語句
}
catch (AnotherExceptionType aet)
{
// 相應(yīng)處理措施
}
}
在這個(gè)例子中有兩種異常處理情況,拋出異常和捕捉異常,如果在try語句塊中產(chǎn)生ExceptionType類型的異常的話,會(huì)被拋出。如果產(chǎn)生AnotherExceptionType類型的話,則不會(huì)被拋出,因?yàn)樵诜椒˙的頭部中并沒有聲明會(huì)拋出該異常。
四、內(nèi)層方法拋出一個(gè)異常,但本身有try-finally
public methodB() throws ExceptionType{
try
{
// 可能產(chǎn)生異常的語句
}
finally
{
// 一定要執(zhí)行的語句
}
}
這個(gè)例子與上一個(gè)例子很像,不同的是沒有catch,但增加了finally。它的意思如果方法B中try語句塊中如果產(chǎn)生了異常,則拋出由外層方法處理。然后方法B繼續(xù)執(zhí)行finally中的語句。