Java面向對象之異常(throw與throws)


 

一、基礎概念

  1、throw和throws的區別:

   位置不同:throws用在函數上,后面跟的是異常類,可以跟多個。

         throw用在函數內,后面跟的是異常對象。

   功能不同:throws用來聲明異常,讓調用者知道該功能有可能出現的問題,並由調用者給出預先的處理方式。

         throw拋出具體問題的對象。語句執行到throw功能就結束了,跳轉到調用者。並將具體的問題對象拋給調用者。

   注意:throw語句獨立存在,下面不要定義其他語句。因為執行不到throw下面的語句。

  2、異常體系的特點:  類以及對象都具備可拋性,可以被throws和throw所操作。

  3、異常的原則:
   一般情況:(編譯時會檢測到異常)

    功能內部有異常throw拋出,功能上一定要throws聲明。功能內部有異常throw拋出,功能上一定要throws聲明。(內部拋什么,功能上就聲明什么。)

    聲明的目的就是為了讓調用者處理,如果調用者不處理,編譯失敗。

   特殊情況:(編譯時不進行檢查)
    當函數內通過throw拋出了RuntimeException時,函數上可以不用throws聲明。

    不聲明是不讓調用者處理。運行時發生異常,程序會停止,對代碼進行修改。

  4.Exception分兩種:

    編譯時會被檢測的異常。

    運行時異常(編譯時不檢測)RuntimeException

二、編譯時會被檢測的異常代碼:

 1 class Demo
 2 {
 3     int div(int a,int b)throws Exception//聲明異常Exception
 4     {
 5         if(b==0)
 6             throw new Exception("異常信息:除數不能為0");//拋出具體問題,編譯時進行檢測。
 7         return a/b;
 8     }
 9 }
10     
11 class ExceptionDemo1
12 {
13     public static void main (String[] arge)
14     {
15         Demo d = new Demo();
16         
17         //對異常進行處理
18         try
19         {
20             int num = d.div(4,0);
21             System.out.println("num="+num);
22         }
23         catch(Exception e)
24         {
25             //處理這個對象,可以使用該對象的方法。
26             System.out.println("處理異常的代碼:除數不能為0");
27             System.out.println(e.getMessage());//異常信息
28             System.out.println(e.toString());//異常名稱+異常信息
29             e.printStackTrace();//異常名字+異常信息+位置。jvm默認處理收到異常就是調用這個方法。將信息顯示在屏幕上。
30         }
31         System.out.println("over");
32     }
33 }

  運行代碼:

  

三、編譯時不檢測,運行異常程序停止代碼

    ArithemticException異常 屬於 RuntimeException異常,所以函數上也可以不用throws聲明。

 1 class Demo
 2 {
 3     int div(int a,int b)
 4     {
 5         if(b==0)
 6             throw new ArithmeticException("異常信息:除數不能為0");//拋出具體問題,編譯時不檢測
 7         return a/b;
 8     }
 9 }
10     
11 class ExceptionDemo1
12 {
13     public static void main (String[] arge)
14     {
15         Demo d = new Demo();
16         
17         int num =d.div(4,0);
18         System.out.println("num="+num);
19         System.out.println("over");//這句話不能被執行了
20     }
21 }

  代碼運行:

  

 

    NullPointerExceptionException異常  和 ArrayIndexOutOfBoundsException異常 都 屬於 RuntimeException異常,所以函數上也可以不用throws聲明。

 1 class ExceptionDemo1 
 2 {
 3     public static void main(String[] args) 
 4     {
 5         int[] arr = new int[3];
 6         //arr = null;
 7         System.out.println("element:"+getElement(arr,-2));
 8     }
 9     //定義一個功能。返回一個整型數組中指定位置的元素。
10     public static int getElement(int[] arr,int index)
11     {
12         if(arr==null)
13             throw new NullPointerException("數組實體不存在");
14 
15         if(index<0 || index>=arr.length)
16         {
17             throw new ArrayIndexOutOfBoundsException(index+",角標不存在");
18         }
19         System.out.println("element:"+getElement(arr,-2));
20         int element = arr[index];
21         return element;
22     }
23 }

  代碼運行:

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM