JAVA 如何處理異常?

1.java將如何處理異常?

1.Java通過面向對象的方法進行異常處理,把各種不同的異常進行分類,並提供了良好的接口。
2.在Java中,每個異常都是一個對象,它是Throwable類或其它子類的實例。
當一個方法出現異常後便拋出一個異常對象,該對象中包含有異常信息,調用這個對象的方法可以捕獲到這個異常並進行處理。
3.ava的異常處理是通過5個關鍵詞來實現的:try、catch、throw、throws和finally。

1.1Java中的異常處理機制的簡單原理和應用。

  1. 當JAVA程序違反了JAVA的語義規則時,JAVA虛擬機就會將發生的錯誤表示爲一個異常。違反語義規則包括2種情況。
  • 一種是JAVA類庫內置的語義檢查。例如數組下標越界,會引發IndexOutOfBoundsException;訪問null的對象時會引發NullPointerException。
    另一種情況就是JAVA允許程序員擴展這種語義檢查,程序員可以創建自己的異常,並自由選擇在何時用throw關鍵字引發異常。
    所有的異常都是java.lang.Thowable的子類。
  1. Java通過面向對象的方法進行異常處理,把各種不同的異常進行分類,並提供了良好的接口。
    在Java中,每個異常都是一個對象,它是Throwable類或其它子類的實例。
    當一個方法出現異常後便拋出一個異常對象,該對象中包含有異常信息,調用這個對象的方法可以捕獲到這個異常並進行處理。
    Java的異常處理是通過5個關鍵詞來實現的:try、catch、throw、throws和finally。

  2. 一般情況下是用try來執行一段程序,如果出現異常,
    系統會拋出(throws)一個異常,這時候你可以通過它的類型來捕捉(catch)它,或最後(finally)由缺省處理器來處理。
    用try來指定一塊預防所有“異常”的程序。緊跟在try程序後面,應包含一個catch子句來指定你想要捕捉的“異常”的類型。
    throw語句用來明確地拋出一個“異常”。throws用來標明一個成員函數可能拋出的各種“異常”。

  3. Finally爲確保一段代碼不管發生什麼“異常”都被執行一段代碼。
    可以在一個成員函數調用的外面寫一個try語句,在這個成員函數內部寫另一個try語句保護其他代碼。每當遇到一個try語句,
    “異常”的框架就放到堆棧上面,直到所有的try語句都完成。
    如果下一級的try語句沒有對某種“異常”進行處理,堆棧就會展開,直到遇到有處理這種“異常”的try語句。

1.1 可以用以下代碼實現:

下面展示一些 Test 測試 代碼片

public class Test {

public static void main(String[] args) throws InterruptedException {
	System.out.println("hello");
	int a = 10;
	int b = a/0;   // 運行時異常。 除數不能爲零。
	
	int[] arrs = new int[10];
	arrs[11] = 10; // 運行時異常。 數組下標越界異常。
	
	System.out.println("正在登陸中");
	for(int i=0;i<100;i++){
		Thread.sleep(1000); // 請看main方法上的throws 刪除它,你就會看見非運行時異常。需要強制處理的異常。
		System.out.println("*");
		if(i==10){
			break;
		}
		
	}
	System.out.println("登錄成功");
	
}

}

2.如何處理異常

2.1 try , catch

  • try 用來定義可能出現異常的代碼塊。
  • catch 用來捕捉異常, 處理異常。

下面展示一些 Test 測試 代碼片

	public class Test2 {

	public static void main(String[] args) {
	
	System.out.println("hello1");
	System.out.println("hello2");
	System.out.println("hello3");
	System.out.println("hello4");
	System.out.println("hello5");
	try{
		int a = 10;
		int b = a/0;
	}catch(ArithmeticException e){
		System.out.println("保險公司報銷");
		
	}
	System.out.println("hello6");
	try{
		System.out.println("hello7");
		System.out.println("hello8");
		System.out.println("hello9");
		String string = null;
		System.out.println(string.charAt(2));
	}catch(NullPointerException e){
		System.out.println("第二個異常被處理掉");
		
	}
	System.out.println("hello10");
	
	
	}

	}

2.2 finally

  • finally 無論是否出現異常,都必須執行的代碼塊。一般用來關閉連接,釋放流。

下面展示一些 Test 測試 代碼片

public class Test3 {

public static void main(String[] args) {
	System.out.println("hello1");
	System.out.println("hello2");
	System.out.println("hello3");
	System.out.println("hello4");
	System.out.println("hello5");
	try{
		int a = 10;
		int b = a/0;
	}catch(ArithmeticException e){
		System.out.println("保險公司報銷");
	}finally{
		System.out.println("我繼續喝咖啡");
		
	}
	
	System.out.println("hello6");
	
	try{
		System.out.println("hello7");
		System.out.println("hello8");
		System.out.println("hello9");
		String string = null;
//			System.out.println(string.charAt(2));
	}catch(NullPointerException e){
		System.out.println("第二個異常被處理掉了");
	}finally{
		System.out.println("我繼續喝咖啡");
		
	}
	System.out.println("hello10");
}

}

2.3 語法結構

下面展示一些 Test 測試 代碼片

	public class Test4 {

public static void main(String[] args) {
	try{
		// 可能出現異常的代碼塊。
	}catch(Exception e){
		// Exception 或子類,處理異類。
	}finally{
		// 無論是否出現異常,都必須執行代碼塊。  finally不是不想存在的。
	}
	
}

}

3.面試題

3.1 面試題 一

下面展示一些 面試題一 測試 代碼片

		public class Test5 {

	public static void main(String[] args) {
		// 一個catch只處理一個異常。
		// 一個try後面可以有多個catch嗎? 可以。
		// 要求: 異常的父類必須寫在子類之後。
		try {
			int a = 10/1;
			String str = null;
			System.out.println(str.charAt(0));
			System.out.println("77777777");
			int[] ars = new int[3];
			ars[3] = 0;
		}catch (ArithmeticException e){
			System.out.println("除法異常處理");
		}catch (NullPointerException e){
			System.out.println("空指針異常處理");
		}catch (ArrayIndexOutOfBoundsException e){
			System.out.println("數組異常處理");
		}catch (Exception e){
			System.out.println("父類異常");
		}
		
		System.out.println("88888888888888888888");
		
		
	}
	
	}

3.2 面試題 二

  • try 能否獨立存在。 不能
  • catch 能夠獨立存在。 不能
  • finaly 能夠獨立存在。 不能
  • try 後面能夠直接寫 finally > 可以。
  • finally 可以不存在嗎: 可以
  • try 中可以繼續try嗎? 可以
  • catch 中可以繼續try嗎? 可以
  • finally 中可以繼續try嗎? 可以

下面展示一些 面試題二 測試 代碼片

	public class Test6 {

	public static void main(String[] args) {
		try{
			try{
				
			}catch(Exception e){
				
			}
			
		}catch(Exception e){
			try{
				
			}catch (Exception r){
				
			}
 		} finally{
 			try{
 				
 			}catch(Exception r){
 				
 			}
 		}
		
		
	}

	}

3.3 面試題 三 (終極)

下面展示一些 面試題三 測試 代碼片

		public class Test7 {

	public static void main(String[] args) {
		
		int a = show("",null,"a");
		int b = show(null,"","a");
		int c = show("a",null,"");
		System.out.println(a+" "+b+" "+c );
		
	}
	public static int show(String a,String b,String c){
		try{
			a.length();
			b.length();
			c.length();
			return 1;
		}catch (Exception e){
			return 2;
			
		}finally{
			return 3;
		}
	}

	}

4.拋出異常

  • throw 拋出異常

  • throws 當前位置不處理,交給調用位置處理異常

下面展示一些 Tast 代碼片


	public class Test8 {

	public static void main(String[] args) throws Exception {
		try{
			System.out.println("hello1");
			System.out.println("hello1");
			System.out.println("hello1");
			System.out.println("hello1");
			int a = 10/0;
			
		}catch(Exception e){
			throw e;// 拋出異常。
		}
		
		// 調用位置。
		method();
		
	}
	// throws 表示當前位置不處理異常,交給調用位置處理。
	public static void method()throws Exception{
		int a = 10/0;
		
	}

	}

5.自定義異常

  • 繼承自: Exception
  • 使用throw 拋出自定義異常子類

下面展示一些 Test 代碼片


		public class Test9 {

	public static void main(String[] args) throws Exception {
		String name = "張三6";
		if(!name.equals("張三")){
			throw new Exception("姓名信息錯誤");
		}
	}

}

6.DeBug bug 臭蟲

Bug : 臭蟲。 計算機中的異常,錯誤
*

  • DeBug 單步調試
  • F6:單步執行
  • F5:進入方法
  • F7:跳出方法
  • F8:結束調試

下面展示一些 Demo 代碼片


		public class DeBugDemo {
	
	public void show(){
		System.out.println("hello1");
		System.out.println("hello2");
		System.out.println("hello3");
		System.out.println("hello4");
		System.out.println("hello5");
		System.out.println("hello6");
		System.out.println("hello7");
		System.out.println("hello8");
	}

}

下面展示一些 DeBug 代碼片


		public class Test10 {

	public static void main(String[] args) {
		System.out.println("hello1");
		System.out.println("hello2");
		System.out.println("hello3");
		System.out.println("hello4");
		int a = 10;
		int b = 20;
		System.out.println("hello5");
		System.out.println("hello6");
		DeBugDemo deb = new DeBugDemo();
		deb.show();
		System.out.println("hello7");
		System.out.println("hello8");
		System.out.println("hello9");
		System.out.println("hello10");
		System.out.println("hello11");
		System.out.println("hello12");
		
	}

}

7. Throwable

  • 所有異常和錯誤的父類。
  • throwable 有兩個子類。

鏈接: link.
——————————————————————
在這裏插入圖片描述
————————————————————

  • Error錯誤 Error表示系統級的錯誤和程序無法通過修改程序處理的異常,內存泄露

Exception 異常 Exception表示需要捕捉或者需要程序進行處理的異常,如果程序正常執行,將不會出現異常

Exception: 運行時異常,非運行時異常(檢查異常)

運行時異常程序運行時出現的異常,由虛擬機捕捉,並拋出到控制檯的異常
非運行時異常java編譯器要求方法必須處理或拋出可能發生的非運行時異常


——————————————————……0.0……

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章