1. 程式人生 > >Java學習筆記之異常處理

Java學習筆記之異常處理

span 怎麽辦 空指針 處理 異常處理 空指針異常 一個 算數 輸入

一.異常的分類

  1.由Java虛擬機拋出的異常(Error):程序無法處理的問題,用戶不用去進行處理(虛擬機錯誤丶內存溢出錯誤丶線程死鎖)

   2.Exception異常:程序本身可以進行處理的異常

      1.非檢查異常(Unchecked Exception):編譯器不需要強制處理的異常(空指針異常丶數組下標越界異常丶算數異常丶類型轉換異常)

      2.檢查異常(checked Exception):編譯器需要強制處理的異常(IOException丶SQLException)

二.異常處理的兩種方法

 1.通過try丶catch和finally關鍵字在當前位置進行異常處理

	public static void main(String[] a){
	int sum = 0;
	while(true){
		try {  //以兩數相除除數不能為0進行舉例
			System.out.println("請依次輸入兩個數值進行除法操作:");
			Scanner scanner = new Scanner(System.in);
			int one =scanner.nextInt();
			int two =scanner.nextInt();
			sum = one/two;
			System.out.println("最終結果為:"+sum);
		} catch (Exception e) {                  //用catch將錯誤進行捕捉,這裏可以使用多重catch,對於不同的錯誤進行捕捉,但最後的catch建議為Exception。
			// TODO Auto-generated catch block         //顯示錯誤堆棧信息
			e.printStackTrace();                          
		}finally{

            System.out.print("無論有沒有錯誤我都會執行");
          } } } }

輸出:

技術分享圖片

 2.通過try丶catch丶finally丶throw和throws拋出異常給函數調用者進行處理

public class Try {
	public static void main(String[] a){
		try{
			Function();                    //在函數調用者處對異常進行處理
		}catch(Exception e)
		{
			e.printStackTrace();
		}	
	}
	static void  Function() throws Exception{            //通過throws將異常進行拋出
	
		System.out.println("請輸入一個數值進行判斷:");
		Scanner scanner = new Scanner(System.in);
		int one =scanner.nextInt();
		if(one<100)
		{
			throw new Exception();              //若輸入的數值小於100則拋出異常
		}
	}	
}

輸出:

技術分享圖片

 

 3.自定義異常進行處理

class  MyException extends Exception{                    //自定義異常,通過super方法傳遞異常信息給父級
	public MyException(){
	super("這是我自定義的異常");
	}
}

public class Try {
	public static void main(String[] a){
		try{
			Function();
		}catch(MyException e)
		{
			e.printStackTrace();
		}	
	}
	static void  Function() throws MyException{
	
		System.out.println("請輸入一個數值進行判斷:");
		Scanner scanner = new Scanner(System.in);
		int one =scanner.nextInt();
		if(one<100)
		{
			throw new MyException();              //將自定義異常進行拋出  
		}
	}	
}

輸出:

技術分享圖片

三.異常鏈  

 有的時候我們會在處理一個異常的時候拋出一個新的異常,也就是異常的嵌套,但是最後我們得到的異常信息卻只有一個。

示例:

public class Try {
	public static void main(String[] a){
		try{
			Function1();
		}catch(Exception e)
		{
			e.printStackTrace();
		}	
	}
	static void  Function1() throws Exception{
		try{
			Function2();
		}catch(Exception e){
			throw new Exception();
		}
	}	
	static void  Function2() throws Exception{
		try{
			Function3();
		}catch(Exception e){
			throw new Exception();
		}
	}	
	static void  Function3() throws Exception{
			throw new Exception();
	}	
}

輸入結果:

技術分享圖片

  這樣的話顯示出的異常就只有一個了,那我們如果想讓這條異常鏈中的所有異常信息全部輸出該怎麽辦呢?方法很簡單,我們在拋出異常的時候將異常對象也當作參數進行拋出就行了。

示例:

public class Try {
	public static void main(String[] a){
		try{
			Function1();
		}catch(Exception e)
		{
			e.printStackTrace();
		}	
	}
	static void  Function1() throws Exception{
		try{
			Function2();
		}catch(Exception e){
			throw new Exception("異常2",e);
		}
	}	
	static void  Function2() throws Exception{
		try{
			Function3();
		}catch(Exception e){
			throw new Exception("異常2",e);
		}
	}	
	static void  Function3() throws Exception{
			throw new Exception("異常3");
	}	
}

運行結果:

技術分享圖片

到此,我們Java中的異常便是描述完了。

Java學習筆記之異常處理