亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

請大家幫我看看這個問題

請大家幫我看看這個問題

月亮島Superman 2017-04-11 11:03:57
我想問下我這個程序 ?為什么會輸出 ? 操作結束try ?{}catch( ? ?){} ? ? ? ?當try.......catch ?語句補捉到Myexception異常后 ?應該會終止運行才對??!? ? ? ?除非在后面加上 ?finally ?{“操作結束‘}才可以輸出 ? ?這里為什么會輸出”操作結束“ ???
查看完整描述

5 回答

已采納
?
frece

TA貢獻36條經驗 獲得超15個贊

樓主你說的這句話“當try.......catch ?語句補捉到Myexception異常后 ?應該會終止運行才對??!”

這里你有一個理解錯誤:如果發生異常你不捕獲, 程序才會卡在發生異常的地方,這里你捕獲了,程序當然可以繼續跑下去啊,否則捕獲異常是為了什么呢?

出紅字是因為e.printTrace(); 如果你把這行刪掉或者換成System.out.println(e.getMessage()); 就沒有紅字異常了

關于finally: 如果你在try里加一句 int i = 1/0; 他就不會輸出 操作結束了,程序會卡在這行代碼上因為你并沒有捕獲除0異常,這個時候如果你加了finally在里邊輸出“操作結束”,重新跑程序可以輸出“操作結束”了但是還是會有報錯信息,因為 finally代碼塊你可以理解為:無論如何都要做里邊的事


查看完整回答
2 反對 回復 2017-04-11
  • 月亮島Superman
    月亮島Superman
    如果我在try{}語句中添加三個可能出現異常的語句呢 try{ 可能異常代碼1; 可能異常代碼2; 可能異常代碼3; }catch(Exception e){ 處理異常1{}; 處理異常2{}; 處理異常3{}; } 假設我1,2,3中都會出現異常,,,執行到try中的 可能異常代碼1 然后交給catch中的處理異常1中 當這個異常處理完成之后呢? 是繼續回到try中運行 代碼2??還是這段try....catch 代碼運行結束?
  • 月亮島Superman
    月亮島Superman
    如果你在try里加一句 int i = 1/0; 他就不會輸出 操作結束了,程序會卡在這行代碼上因為你并沒有捕獲除0異常 主要對這句不理解 就例如下面這個程序 public class Exercise { public static void main(String[] args) { int a[] = {1,2,3}; boolean hasExseption = false; try { a[3] = 4; int i = 1/0; }catch(Exception e){ System.out.println("數組越界"); hasExseption = true; } if(hasExseption) { System.out.println("程序異常運行結束"); }else { System.out.println("程序正常運行結束"); } } } 例如這個程序 當處理完成 a[3]=4;這個異常后 會繼續執行下面的if判斷代碼,當if判斷代碼執行完畢后 這個程序也就結束了對吧,就不會處理int i = 1/0;這個異常了把
  • frece
    frece
    第一個問題,如果你的程序有3個地方會發生異常,他跑到第一個異常的時候就會跳到catch,catch也只能捕獲這一個異常,不會處理其他的,處理完之后 會繼續跑catch之后的內容。 第二個問題,抱歉我表達可能有些問題, 如果try里發生的異常你沒有捕獲,他會在錯誤代碼那里拋異常,不是卡住不動。 這個問題: 當處理完成 a[3]=4;這個異常后... 程序跑到這會發生數組越界異常,然后會跳到catch找你有沒有捕獲這個異常,如果沒捕獲的話程序還是會拋紅字異常,如果捕獲了就會繼續執行,這里你用Exception捕獲的所以不會有問題, 你的if判斷是在catch之后的,執行完之后當然程序就直接結束了,程序怎么可能倒著跑╮(╯▽╰)╭ 你的代碼我給你改了一下,你跑四次, 第一次直接跑, 第二次注釋 a[3] = 4; 這一行, 第三次注釋 a[3] = 4; int i = 1/0; 這兩行, 第四次注釋 a[3] = 4; int i = 1/0; 這兩行 還有 catch(Exception e){ 這個代碼塊 看看結果應該就能理解上邊說的內容了 public static void main(String[] args) { int a[] = {1,2,3}; boolean hasExseption = false; try { a[3] = 4; int i = 1/0; String str = ""; str = null; int l = str.length(); } catch(ArrayIndexOutOfBoundsException e){ System.out.println("數組越界"); hasExseption = true; } catch(ArithmeticException e){ System.out.println("除零異常"); hasExseption = true; } catch(Exception e){ System.out.println(e.getMessage()); hasExseption = true; } if(hasExseption) { System.out.println("程序異常運行結束"); }else { System.out.println("程序正常運行結束"); } } 注意:如果使用 System.out.println(e.getMessage()); 這種方式查看異常,最后控制臺打出 “null”的時候,是空指針異常
?
望遠

TA貢獻1017條經驗 獲得超1032個贊

try{
????....
????int?a=2/0;//發生異常
????....//得不到執行,跳出到catch塊
}catch(Exception?e)//匹配異常
{
????//執行異常處理。
}finally
{
//不管是否發生異常,finally塊都會得到執行。
}
...//繼續執行以下代碼


查看完整回答
2 反對 回復 2017-04-11
  • 望遠
    望遠
    寫錯了finally塊都會得到執行。
?
Gatico

TA貢獻1條經驗 獲得超1個贊

誰說try catch 捕獲到異常就會停止?捕獲到了,因該處理,然后繼續執行,程序才不會報錯,不然跟不加try catch 有什么區別?

查看完整回答
1 反對 回復 2017-04-12
?
HansonQ

TA貢獻223條經驗 獲得超56個贊

你捕獲了,就會繼續執行!


查看完整回答
1 反對 回復 2017-04-11
?
奪命小書生

TA貢獻19條經驗 獲得超6個贊

樓主你說的這句話“當try.......catch ?語句補捉到Myexception異常后 ?應該會終止運行才對??!”

這里你有一個理解錯誤:如果發生異常你不捕獲, 程序才會卡在發生異常的地方,這里你捕獲了,程序當然可以繼續跑下去啊,否則捕獲異常是為了什么呢?

出紅字是因為e.printTrace(); 如果你把這行刪掉或者換成System.out.println(e.getMessage()); 就沒有紅字異常了

關于finally: 如果你在try里加一句 int i = 1/0; 他就不會輸出 操作結束了,程序會卡在這行代碼上因為你并沒有捕獲除0異常,這個時候如果你加了finally在里邊輸出“操作結束”,重新跑程序可以輸出“操作結束”了但是還是會有報錯信息,因為 finally代碼塊你可以理解為:無論如何都要做里邊的事



try{

????....

????int?a=2/0;//發生異常

????....//得不到執行,跳出到catch塊

}catch(Exception?e)//匹配異常

{

????//執行異常處理。

}finally

{

//不管是否發生異常,finally塊都會得到執行。

}

...//繼續執行以下代碼


查看完整回答
反對 回復 2017-04-12
?
Caballarii

TA貢獻1123條經驗 獲得超629個贊

如果try/catch捕獲異常以后就終止運行,那和不捕獲有什么區別,起不到讓程序正常執行的作用了。

所以你只是理解錯了而已

查看完整回答
1 反對 回復 2017-04-11
  • 5 回答
  • 0 關注
  • 1720 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號