《Java從入門到放棄》JavaSE入門篇:異常

異常!!!看看生活中的異常例子:java

wKiom1m4oQqxKdrbAAFGwKziKVg319.png

wKioL1m4oOLjWr47AAFsu0bBQpY688.png

正常狀況下,從家到公司上班,只須要20分鐘!但若是在路上碰到堵車或修路或車忽然自燃等問題,那就沒辦法正常去上班了。其中堵車或修路或車忽然自燃等問題就屬於異常。編程

wKiom1m4o5-z165XAAF7me8U_-I750.png

碰到異常,就須要處理,否則就只能中斷上班了。數組


在Java程序中的異常表示什麼意思呢?測試

Java中的錯誤分爲兩類:錯誤(Error)和異常(Exception)ui

錯誤通常都是在編譯前IDE就能發現並提示,例如非要給整型變量賦一個超大的數值:編碼

wKiom1m4pVzyXurKAAAobEQWUQQ110.png

 

這就是一個典型的Error。spa

 

程序在運行時出現的問題,就叫異常!!!若是在編程時不考慮到對這些異常的處理,當出現異常時,程序就會中止。例以下面示例中的除0錯誤:3d

1
2
3
4
5
6
7
public  static  void  main(String[] args) {
     Scanner input =  new  Scanner(System.in);
     System.out.print( "請輸入整數:" );
     int  i = input.nextInt();
     int  sum =  10 /i;
     System.out.println(sum);
}

這段代碼在編譯時是沒有任何問題的,但在運行時輸入0就會提示有異常:code

wKioL1m4pwuidY2IAAA-PgWQvnA448.png

 

出現錯誤很好解決,在編碼環節改正確就OK了,但有的時候是否出現異常就不是開發者能控制的(如上例),因此開發者只能預判哪些地方有可能出現異常,提早作好處理。orm

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public  static  void  main(String[] args) {
     Scanner input =  new  Scanner(System.in);
     System.out.print( "請輸入整數(不能輸入0):" );
     int  i = input.nextInt();
     int  sum =  0 ;
     try  {
         sum =  10 /i;
     catch  (Exception e) {
         // TODO: handle exception
         System.out.println( "不能輸入0,不能輸入0,不能輸入0!!!聽不懂國語麼!!!" );
     }
     
     System.out.println(sum);
}

結果:

wKioL1m4p7rjSZnpAAAnjFGsyE4083.png

 

能夠發現結果中再也不出現異常的信息,並且換成了咱們本身的提示信息。

 

就跟下面兩個圖的區別一下,若是異常直接出如今用戶面前,用戶頗有可能就不再用你的程序了,而若是給個提示,則用戶有可能會繼續使用。

 

wKiom1m4qLjC22vWAAB1TJVypJM826.jpg    wKiom1m4qLmAIaj9AACVLI00dqo347.jpg


 

異常的概念就介紹完畢啦!!!j_0019.gif,接下來看看Java中是如何處理異常的。

Java中的常見異常以下圖:

wKiom1m4qWfRiMv7AADDxzkspek720.png

固然,這隻列出了一部分,還有不少的異常已比較常見,當你們碰到時最好查一下JDK。

 

Java中異常的三種處理方式:

  1. try-catch-finally

  2. throw和throws

 

1、try-catch-finally

    try部分是必須的,用來捕獲異常,通常把有可能出現異常的代碼放入其中。

    catch部分能夠有零到多個,是用來判斷異常類別並進行處理,通常把異常處理代碼放入其中。

    finally部分可選,不管是否有異常都必須執行的代碼放入其中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int  firstNum =  12
int  secondNum =  0 ;
try  {
     int  result = firstNum/secondNum;
     System.out.println( "兩個數字相除的結果是:" +result)       
} catch (ArithmeticException e) {
     System.out.println( "算術異常:" );
} catch (NumberFormatException e) {
     System.out.println( "數字轉換異常" );
} catch (ArrayIndexOutOfBoundsException e){
     System.out.println( "數組下標越界異常" );
} catch (Exception e) {
     System.out.println( "其餘異常" );
}
finally {
     System.out.println( "我是必需要執行滴,快叫爸爸!" );
}

 

2、thorw和throws

    這個關鍵字的做用是拋出異常,它不處理。

    我叫小明給我帶份紅燒肉,小明去食堂發現沒有紅燒肉(這就至關於異常出現了),他不知道如何處理,就回到寢室告訴我沒有紅燒肉,而後我再來處理。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public  class  XiaoMing {
     //買食物的方法
     public  void  buyFood(String food)  throws  Exception{
         //用一個集合表示食堂的全部菜
         List<String> foods =  new  ArrayList<String>();
         foods.add( "青椒雞蛋" );
         foods.add( "青椒肉絲" );
         foods.add( "紅燒排骨" );
         foods.add( "土豆歡聲" );
         //表示是否有該食物的狀態
         int  state =  0 ;    //默認沒有 0.沒有該食物 1.有該食物
         for  (String string : foods) {
             if (food.equals(string)){
                 state =  1 ;
                 break ;
             }
         }
         
         if (state== 0 ){
               throw  new  Exception( "你要吃的菜沒有了!" );
         }
     }
}

編寫測試代碼:

wKiom1m4rbCBvCWJAAAd58WvCrY080.png

    不瞎的朋友應該發現有什麼問題了吧?

    是的,由於buyFood()方法後面咱們加了throws Exception,因此在調用時IDE就認爲這兒極有可能會有異常,咱們就必須處理它,仍是兩種方式,要麼使用try-catch,要麼在main方法後繼續拋異常(throws Exception)。

wKiom1m4rkGC5Sc7AAA2sY4YOqQ796.png

在Java中,除了使用JDK中定義好的異常外,咱們還能夠自定義異常,這個很簡單,定義一個類,繼承Exception類,重寫一個參數的構造方法就OK了。


 

好吧,異常到這兒就夠用了,須要深刻了解的朋友,請自行百度吧,哈哈!j_0028.gif

 

「軟件思惟」博客地址:51CTO博客園,感興趣的小夥伴能夠去看相關的其它博文。  

相關文章
相關標籤/搜索