java異常類深入研究_第1頁
java異常類深入研究_第2頁
java異常類深入研究_第3頁
java異常類深入研究_第4頁
java異常類深入研究_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、1 異常package cn.itcast_01;/* * 異常:程序出現(xiàn)了不正常的情況。 * * 舉例:今天天氣很好,班長出去旅游。騎著自行車,去山里面呼吸新鮮空氣。 * 問題1:山路塌陷了,班長及時(shí)停住了,但是過不去了。嚴(yán)重的問題。 * 問題2:班長出門推自行車,發(fā)現(xiàn)氣沒了,把氣吹起來。出發(fā)前就應(yīng)該檢查的問題。 * 問題3:班長騎著車在山路上愜意的行駛著,山路兩邊是有小石子的,中間是平坦的水泥路。 * 一直在平坦的水泥路上行駛是沒有任何問題的,但是呢,他偏偏喜歡騎到小石子上,結(jié)果爆胎了。旅游的過程中出現(xiàn)的問題。 * no zuo no die。 * * 程序的異常:Throwable *

2、嚴(yán)重問題:Error 我們不處理。這種問題一般都是很嚴(yán)重的,比如說內(nèi)存溢出。 * 問題:Exception * 編譯期問題:不是RuntimeException的異常 必須進(jìn)行處理的,因?yàn)槟悴惶幚?,編譯就不能通過。 * 運(yùn)行期問題:RuntimeException這種問題我們也不處理,因?yàn)槭悄愕膯栴},而且這個(gè)問題出現(xiàn)肯定是我們的代碼不夠嚴(yán)謹(jǐn),需要修正代碼的。 * * 如何程序出現(xiàn)了問題,我們沒有做任何處理,最終jvm會做出默認(rèn)的處理。 * 把異常的名稱,原因及出現(xiàn)的問題等信息輸出在控制臺。 * 同時(shí)會結(jié)束程序。 */public class ExceptionDemo public stati

3、c void main(String args) /第一階段int a = 10;/ int b = 2;int b = 0;System.out.println(a / b);/第二階段System.out.println("over");ExceptionDemo.javapackage cn.itcast_02;/* * 我們自己如何處理異常呢? * A:try.catch.finally * B:throws 拋出 * * try.catch.finally的處理格式: * try * 可能出現(xiàn)問題的代碼; * catch(異常名 變量) * 針對問題的處理; *

4、finally * 釋放資源; * * * 變形格式: * try * 可能出現(xiàn)問題的代碼; * catch(異常名 變量) * 針對問題的處理; * * * 注意: * A:try里面的代碼越少越好 * B:catch里面必須有內(nèi)容,哪怕是給出一個(gè)簡單的提示 */public class ExceptionDemo public static void main(String args) / 第一階段int a = 10;/ int b = 2;int b = 0;try System.out.println(a / b); catch (ArithmeticException ae) Sy

5、stem.out.println("除數(shù)不能為0");/ 第二階段System.out.println("over");ExceptionDemo2.javapackage cn.itcast_02;/* * A:一個(gè)異常 * B:二個(gè)異常的處理 * a:每一個(gè)寫一個(gè)try.catch * b:寫一個(gè)try,多個(gè)catch * try * . * catch(異常類名 變量名) * . * * catch(異常類名 變量名) * . * * . * * 注意事項(xiàng): * 1:能明確的盡量明確,不要用大的來處理。 * 2:平級關(guān)系的異常誰前誰后無所謂,如果出

6、現(xiàn)了子父關(guān)系,父必須在后面。 * * 注意: * 一旦try里面出了問題,就會在這里把問題給拋出去,然后和catch里面的問題進(jìn)行匹配, * 一旦有匹配的,就執(zhí)行catch里面的處理,然后結(jié)束了try.catch * 繼續(xù)執(zhí)行后面的語句。 */public class ExceptionDemo2 public static void main(String args) / method1();/ method2();/ method3();method4();public static void method4() int a = 10;int b = 0;int arr = 1, 2, 3

7、 ;/ 爺爺在最后try System.out.println(a / b);System.out.println(arr3);System.out.println("這里出現(xiàn)了一個(gè)異常,你不太清楚是誰,該怎么辦呢?"); catch (ArithmeticException e) System.out.println("除數(shù)不能為0"); catch (ArrayIndexOutOfBoundsException e) System.out.println("你訪問了不該的訪問的索引"); catch (Exception e) S

8、ystem.out.println("出問題了");/ 爺爺在前面是不可以的/ try / System.out.println(a / b);/ System.out.println(arr3);/ System.out.println("這里出現(xiàn)了一個(gè)異常,你不太清楚是誰,該怎么辦呢?");/ catch (Exception e) / System.out.println("出問題了");/ catch (ArithmeticException e) / System.out.println("除數(shù)不能為0"

9、);/ catch (ArrayIndexOutOfBoundsException e) / System.out.println("你訪問了不該的訪問的索引");/ System.out.println("over");/ 兩個(gè)異常的處理public static void method3() int a = 10;int b = 0;int arr = 1, 2, 3 ;try System.out.println(arr3);System.out.println(a / b);/ System.out.println(arr3); catch (A

10、rithmeticException e) System.out.println("除數(shù)不能為0"); catch (ArrayIndexOutOfBoundsException e) System.out.println("你訪問了不該的訪問的索引");System.out.println("over");/ 兩個(gè)異常public static void method2() int a = 10;int b = 0;try System.out.println(a / b); catch (ArithmeticException e

11、) System.out.println("除數(shù)不能為0");int arr = 1, 2, 3 ;try System.out.println(arr3); catch (ArrayIndexOutOfBoundsException e) System.out.println("你訪問了不該的訪問的索引");System.out.println("over");/ 一個(gè)異常public static void method1() / 第一階段int a = 10;/ int b = 2;int b = 0;try System.ou

12、t.println(a / b); catch (ArithmeticException ae) System.out.println("除數(shù)不能為0");/ 第二階段System.out.println("over");ExceptionDemo3.javapackage cn.itcast_02;/* * JDK7出現(xiàn)了一個(gè)新的異常處理方案: * try * * catch(異常名1 | 異常名2 | . 變量 ) * . * * * 注意:這個(gè)方法雖然簡潔,但是也不夠好。 * A:處理方式是一致的。(實(shí)際開發(fā)中,好多時(shí)候可能就是針對同類型的問題,給

13、出同一個(gè)處理) *B:多個(gè)異常間必須是平級關(guān)系。 */public class ExceptionDemo3 public static void main(String args) method();public static void method() int a = 10;int b = 0;int arr = 1, 2, 3 ;/ try / System.out.println(a / b);/ System.out.println(arr3);/ System.out.println("這里出現(xiàn)了一個(gè)異常,你不太清楚是誰,該怎么辦呢?");/ catch (Ar

14、ithmeticException e) / System.out.println("除數(shù)不能為0");/ catch (ArrayIndexOutOfBoundsException e) / System.out.println("你訪問了不該的訪問的索引");/ catch (Exception e) / System.out.println("出問題了");/ / JDK7的處理方案try System.out.println(a / b);System.out.println(arr3); catch (ArithmeticE

15、xception | ArrayIndexOutOfBoundsException e) System.out.println("出問題了");System.out.println("over");4 編譯時(shí)和運(yùn)行時(shí)的異常package cn.itcast_03;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;/* * 編譯時(shí)異常和運(yùn)行時(shí)異常的區(qū)別 * 編譯期異常:Java程序必須顯示處理,否則程序就會發(fā)生錯(cuò)誤,無法通過編譯 *

16、 運(yùn)行期異常:無需顯示處理,也可以和編譯時(shí)異常一樣處理 */public class ExceptionDemo public static void main(String args) / int a = 10;/ int b = 0;/ if (b != 0) / System.out.println(a / b);/ String s = "2014-11-20"/ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");SimpleDateFormat sdf = ne

17、w SimpleDateFormat("yyyy-MM-dd");/ Date d = sdf.parse(s);try Date d = sdf.parse(s);System.out.println(d); catch (ParseException e) / e.printStackTrace();System.out.println("解析日期出問題了");5 Try問題package cn.itcast_04;import java.text.ParseException;import java.text.SimpleDateFormat;im

18、port java.util.Date;/* * 在try里面發(fā)現(xiàn)問題后,jvm會幫我們生成一個(gè)異常對象,然后把這個(gè)對象拋出,和catch里面的類進(jìn)行匹配。 * 如果該對象是某個(gè)類型的,就會執(zhí)行該catch里面的處理信息。 * * 異常中要了解的幾個(gè)方法: * public String getMessage():異常的消息字符串 * public String toString():返回異常的簡單信息描述 * 此對象的類的 name(全路徑名) * ": "(冒號和一個(gè)空格) * 調(diào)用此對象 getLocalizedMessage()方法的結(jié)果 (默認(rèn)返回的是getMes

19、sage()的內(nèi)容) * printStackTrace() 獲取異常類名和異常信息,以及異常出現(xiàn)在程序中的位置。返回值void。把信息輸出在控制臺。 */public class ExceptionDemo public static void main(String args) String s = "2014-11-20"SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");try Date d = sdf.parse(s); / 創(chuàng)建了一個(gè)ParseException

20、對象,然后拋出去,和catch里面進(jìn)行匹配System.out.println(d); catch (ParseException e) / ParseException e = new ParseException();/ ParseException/ e.printStackTrace();/ getMessage()/ System.out.println(e.getMessage();/ Unparseable date: "2014-11-20"/ toString()/ System.out.println(e.toString();/ java.text.P

21、arseException: Unparseable date: "2014-11-20"e.printStackTrace();/跳轉(zhuǎn)到某個(gè)指定的頁面(index.html)System.out.println("over");6 解決出錯(cuò)問題package cn.itcast_05;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;/* * 有些時(shí)候,我們是可以對異常進(jìn)行處理的,但是又有些時(shí)候,我們根本就沒有權(quán)限去處理某個(gè)異常

22、。 * 或者說,我處理不了,我就不處理了。 * 為了解決出錯(cuò)問題,Java針對這種情況,就提供了另一種處理方案:拋出。 * * 格式: * throws 異常類名 * 注意:這個(gè)格式必須跟在方法的括號后面。 * * 注意: * 盡量不要在main方法上拋出異常。 * 但是我講課為了方便我就這樣做了。 * * 小結(jié): * 編譯期異常拋出,將來調(diào)用者必須處理。 * 運(yùn)行期異常拋出,將來調(diào)用可以不用處理。 */public class ExceptionDemo public static void main(String args) System.out.println("今天天氣很好&

23、quot;);try method(); catch (ParseException e) e.printStackTrace();System.out.println("但是就是不該有霧霾");method2();/ 運(yùn)行期異常的拋出public static void method2() throws ArithmeticException int a = 10;int b = 0;System.out.println(a / b);/ 編譯期異常的拋出/ 在方法聲明上拋出,是為了告訴調(diào)用者,你注意了,我有問題。public static void method() t

24、hrows ParseException String s = "2014-11-20"SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date d = sdf.parse(s);System.out.println(d);7 Throwpackage cn.itcast_06;/* * throw:如果出現(xiàn)了異常情況,我們可以把該異常拋出,這個(gè)時(shí)候的拋出的應(yīng)該是異常的對象。 * * throws和throw的區(qū)別(面試題)throws用在方法聲明后面,跟的是異常類名可

25、以跟多個(gè)異常類名,用逗號隔開表示拋出異常,由該方法的調(diào)用者來處理throws表示出現(xiàn)異常的一種可能性,并不一定會發(fā)生這些異常throw用在方法體內(nèi),跟的是異常對象名只能拋出一個(gè)異常對象名表示拋出異常,由方法體內(nèi)的語句處理throw則是拋出了異常,執(zhí)行throw則一定拋出了某種異常 */public class ExceptionDemo public static void main(String args) / method();try method2(); catch (Exception e) e.printStackTrace();public static void method()

26、 int a = 10;int b = 0;if (b = 0) throw new ArithmeticException(); else System.out.println(a / b);public static void method2() throws Exception int a = 10;int b = 0;if (b = 0) throw new Exception(); else System.out.println(a / b);8 Finally類FinallyDemo.javapackage cn.itcast_07;import java.text.ParseEx

27、ception;import java.text.SimpleDateFormat;import java.util.Date;/* * finally:被finally控制的語句體一定會執(zhí)行 * 注意:如果在執(zhí)行到finally之前jvm退出了,就不能執(zhí)行了。 * * A:格式 * try.catch.finally. * B:用于釋放資源,在IO流操作和數(shù)據(jù)庫操作中會見到 */public class FinallyDemo public static void main(String args) String s = "2014-11-20"SimpleDateFor

28、mat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date d = null;try / System.out.println(10 / 0);d = sdf.parse(s); catch (ParseException e) e.printStackTrace();System.exit(0); finally System.out.println("這里的代碼是可以執(zhí)行的");System.out.println(d);FinallyDemo2.javapackage cn.itcast_0

29、7;/* * 面試題: * 1:final,finally和finalize的區(qū)別 * final:最終的意思,可以修飾類,成員變量,成員方法 * 修飾類,類不能被繼承 * 修飾變量,變量是常量 * 修飾方法,方法不能被重寫 * finally:是異常處理的一部分,用于釋放資源。 * 一般來說,代碼肯定會執(zhí)行,特殊情況:在執(zhí)行到finally之前jvm退出了 * finalize:是Object類的一個(gè)方法,用于垃圾回收 * * 2:如果catch里面有return語句,請問finally里面的代碼還會執(zhí)行嗎? * 如果會,請問是在return前,還是return后。 * 會。前。 * * 準(zhǔn)

30、確的說,應(yīng)該是在中間。 * * 3:try.catch.finally的格式變形 * A:try.catch.finally * B:try.catch * C:try.catch.catch. * D:try.catch.catch.finally * E:try.finally * 這種做法的目前是為了釋放資源。 */public class FinallyDemo2 public static void main(String args) System.out.println(getInt();public static int getInt() int a = 10;try Syste

31、m.out.println(a / 0);a = 20; catch (ArithmeticException e) a = 30;return a;/* * return a在程序執(zhí)行到這一步的時(shí)候,這里不是return a而是return 30;這個(gè)返回路徑就形成了。 * 但是呢,它發(fā)現(xiàn)后面還有finally,所以繼續(xù)執(zhí)行finally的內(nèi)容,a=40 * 再次回到以前的返回路徑,繼續(xù)走return 30; */ finally a = 40;return a;/如果這樣結(jié)果就是40了。/ return a;8 自定義異常MyEXxception.javapackage cn.itcast

32、_08;/* * java不可能對所有的情況都考慮到,所以,在實(shí)際的開發(fā)中,我們可能需要自己定義異常。 * 而我們自己隨意的寫一個(gè)類,是不能作為異常類來看的,要想你的類是一個(gè)異常類,就必須繼承自Exception或者RuntimeException * * 兩種方式: * A:繼承Exception * B:繼承RuntimeException */public class MyException extends Exception public MyException() public MyException(String message) super(message);/ public c

33、lass MyException extends RuntimeException / StudentDemo.javapackage cn.itcast_08;import java.util.Scanner;/* * 自定義異常測試類 */public class StudentDemo public static void main(String args) Scanner sc = new Scanner(System.in);System.out.println("請輸入學(xué)生成績:");int score = sc.nextInt();Teacher t = new Teacher();try t.c

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論