java实训 :异常(try-catch执行顺序与自定义异常)
生活随笔
收集整理的這篇文章主要介紹了
java实训 :异常(try-catch执行顺序与自定义异常)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
關(guān)鍵字: try:執(zhí)行可能產(chǎn)生異常的代碼 catch:捕獲異常 finally:無論是否發(fā)生異常代碼總能執(zhí)行 throws:聲明方法可能要拋出的各種異常 throw:手動(dòng)拋出自定義異常 用 try-catch-finally 異常處理: 情況一(正常運(yùn)行,無異常): 執(zhí)行try,執(zhí)行finally,執(zhí)行finally塊后的語句 情況二(try中出現(xiàn)異常) 執(zhí)行到異常語句時(shí)(不執(zhí)行try中異常語句之后的語句),直接跳到catch塊,然后執(zhí)行finally,再執(zhí)行finally之后的語句 public class Test2 {public static void main(String[] args) {Scanner in = new Scanner(System.in);System.out.println("請(qǐng)輸入被除數(shù):");try { // 將開始可能異常的代碼放入tryint num1 = in.nextInt();System.out.println("接受除數(shù)");int num2 = in.nextInt();System.out.println(num1+"/"+num2+"="+num1/num2);//return;//異常塊:catch和finally必須至少出現(xiàn)一個(gè),try塊必須有}catch (InputMismatchException e){//try中有匹配的異常,異常后的語句均不執(zhí)行,直接調(diào)用catch,然后執(zhí)行catch塊之后的程序,若有異常但不匹配,不執(zhí)行catch塊,程序直接結(jié)束System.out.println("出現(xiàn)錯(cuò)誤,被除數(shù)和除數(shù)必須為整數(shù)");//e.printStackTrace();//輸出異常堆棧信息,打印錯(cuò)誤序列,調(diào)用過程
e.getMessage();//System.exit(1);return;}catch (ArithmeticException e){System.out.println("被除數(shù)不可為0");e.printStackTrace();}finally {//無論是否發(fā)生異常,異常是否匹配,都會(huì)執(zhí)行finally,若catch調(diào)用System.exit(1);finally與finally之后語句均不執(zhí)行System.out.println("感謝使用");}System.out.println("finally之后語句"); 特殊情況之try中含有return: a.無異常(執(zhí)行順序): 1.return之前的代碼 2.finally 3.return語句 4.執(zhí)行完成(不會(huì)執(zhí)行return之后語句,也不會(huì)執(zhí)行finally塊之后的語句) b.有異常(執(zhí)行順序): 1.異常之前與異常代碼 2.catch語句 3.finally塊 4.finally塊之后語句 5.執(zhí)行完畢(因?yàn)楫惓V苯犹絚atch塊,所以try中return不會(huì)執(zhí)行) 特殊情況之catch中含有return a.無異常(執(zhí)行順序): 1.執(zhí)行try代碼塊 2.執(zhí)行finally塊 3.執(zhí)行finally之后的語句 4.退出(無異常,所以不執(zhí)行catch,直接執(zhí)行finally) b.有異常(執(zhí)行順序): 這里有兩種情況 情況一(異常匹配到的代碼塊中有return): 1.執(zhí)行try塊(異常語句后的try語句均不執(zhí)行)2.執(zhí)行catch塊return之前的語句 3.執(zhí)行finally塊 4.執(zhí)行catch中的return語句 5.退出 情況二(異常匹配到的代碼塊無有return,catch在其他chtch塊中) 執(zhí)行到異常語句時(shí)(不執(zhí)行try中異常語句之后的語句),直接跳到catch塊,然后執(zhí)行finally,再執(zhí)行finally之后的語句 catch塊的執(zhí)行原理: 對(duì)于異常的捕獲,可以有多個(gè)catch,對(duì)于try發(fā)生的異常,他會(huì)根據(jù)發(fā)生的異常和catch里面的異常類型進(jìn)行匹配(按照catch塊從上往下匹配,但并不會(huì)執(zhí)行不匹配的catch塊語句),當(dāng)他匹配到某個(gè)catch塊時(shí),他就直接進(jìn)入這個(gè)catch塊內(nèi),忽略這個(gè)catch塊后面的所有catch塊,所以,一般將catch(Exception e)放在最后,catch塊承先子類后父類排列。 注意:無論是否發(fā)生異常,異常是否匹配,均會(huì)執(zhí)行finally塊,阻止finally執(zhí)行的唯一方法是在catch塊中調(diào)用 System.exit(1) 語句(System.exit(1)表示非正常退出程序)。 用 throw 進(jìn)行異常處理: 開發(fā)方法遇到異常時(shí),開發(fā)人員不一定要一定去處理這個(gè)異常,可以用throws向上繼續(xù)拋出這個(gè)異常(異常可以拋出多個(gè),每個(gè)用逗號(hào)隔開),強(qiáng)制調(diào)用者處理這個(gè)異常,調(diào)用者可以用try-catch處理,也可以繼續(xù)向上聲明,若在main方法處繼續(xù)向上聲明,就會(huì)讓jvm去處理這個(gè)異常。 自定義異常: 第一步:若需要自定義異常名字,需新建一個(gè)類MyException,并讓它繼承Exception;重寫構(gòu)造方法, 若不需要自定義異常名字,則可以略過第一步,在第二步直接書寫 throw new Exception(""); public class MyEcxeption extends Exception {public MyEcxeption(String message) {super(message);}
} 第二步:在你需要的類中引用他(需要用關(guān)鍵字throw),注意,在引用類必須拋出這個(gè)異常 public void setSex(String sex) throws MyException{if (sex.equals("男") || sex.equals("女") ){this.sex = sex;}else {throw new MyException("性別必須為男或女");}} throw與throws的區(qū)別: throw自行定義并拋出異常,位于方法體內(nèi)部,只可以跟一個(gè)異常對(duì)象 throws拋出異常,位于方法參數(shù)列表后,可以跟多個(gè)異常類
轉(zhuǎn)載于:https://www.cnblogs.com/chengxuxiaoman/p/10960822.html
總結(jié)
以上是生活随笔為你收集整理的java实训 :异常(try-catch执行顺序与自定义异常)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 将数组作为参数,调用该函数时候给的是数组
- 下一篇: 重新认知指针