java異常

import java.util.Scanner;
public class Exc{
	public static void main(String[] args){
		Scanner input=new Scanner(System.in);
		System.out.println("Enter two integers:");
		int number1=input.nextInt();
		int number2=input.nextInt();
		//程序包含的是一個try塊和catch塊。try塊包含的是正常情況下執行的代碼。
		//catch塊包含的是number2爲0時執行的代碼。在這種情況下,程序會通過執行下面的語句來拋出一個異常。
		try{
			if(number2==0)
				throw new ArithmeticException("D2ivisor cannot b zero");
			System.out.println(number1+" / "+number2+" is "+(number1/number2));
		}
		//new ArithmeticException("D2ivisor cannot b zero");稱爲一個異常
		//異常時從一個異常類創建的對象。在這種情況下,異常類就是java.lang.ArithmeticException
		catch(ArithmeticException ex){
			System.out.println("Exception:an integer cannot be divided by zero");
			
		}
		System.out.println("Execution continues...");
	}
}
/**
當異常被拋出時,正常的流程就被中斷。拋出異常就是將異常從一個地方傳遞到另一個地方。異常被catch塊捕獲。執行
catch塊中的代碼以處理這個異常。然後,執行catch塊後的語句。
throw類似於方法的調用,不同於調用塊,它調用的是catch塊。從某種意義上講,catch塊就像是帶參數的方法定義,這些參數
匹配拋出的值得類型。
*/

import java.util.Scanner;
public class Quotient {
	public static int quotient(int number1,int number2){
		if(number2==0)
			throw new ArithmeticException("Divisor cannot be zero");
		return number1/number2;
	}
	public static void main(String[] args){
		Scanner input=new Scanner(System.in);
		System.out.println("Enter two integers:");
		int number1=input.nextInt();
		int number2=input.nextInt();
		try{
			int result=quotient(number1,number2);
			System.out.println(number1+" / "+number2+" is "+(number1/number2));
		
		}
		catch(ArithmeticException ex){
			System.out.println("Exception:an integer cannot be divided by zero");
			
		}
		System.out.println("Execution continues...");
	}
}
/**
異常的一個優點:它能使方法拋出一個異常給它的調用者。這個調用者可以處理該異常。異常最根本的優勢試講檢測錯誤由調用的
方法完成,處理錯誤由調用方法完成中分離出來。
*/

Throwable類是所有異常類的根。所有的java異常類都直接或間接地繼承自Throwable

這些異常類可以分爲三類:系統錯誤,異常和運行時異常。

1.系統錯誤,由java虛擬機拋出,用Erroe類表示,描述的是內部系統錯誤。這樣的錯誤很少發生。如果發生,除了通知用戶以及儘量穩妥的終止程序外,幾乎什麼也不能做。

2.異常,是由Exception類表示的,它描述的是由程序和外部環境所引起的錯誤,這些錯誤能夠被程序捕獲和處理。

3.運行時異常,是由RuntimeException類表示的,它描述的是程序設計錯誤。例如,錯誤的類型轉換,訪問一個越界數組或數值錯誤。由java虛擬機拋出。

Java的異常處理模型基於三種操作:聲明一個異常,拋出一個異常,捕獲一個異常。

1.聲明異常。Java中,當前執行的語句必屬於某個方法。Java解釋器調用main方法開始執行一個程序。每個方法都必須聲明它可能拋出的必檢異常的類型。這稱爲聲明異常。因爲任何代碼都可能發生系統錯誤和運行時錯誤。爲了在方法中聲明一個異常,就要在方法頭中使用關鍵字throws。eg:

public void myMethod()throws IOException

關鍵字throws表示myMethod方法可能會拋出異常IOException。如果方法可能拋出多個異常,在throws後加一個用逗號分隔的異常列表。

2.拋出異常。檢測一個錯誤的程序可以創建一個正確異常類型的實例並拋出它。這稱爲拋出一個異常。

IllegalArgumentException ex=new IllegalArgumentException(“Wrong Argument”);

throw ex;

等同於

throw new IllegalArgumentException(“Wrong Argument”);

3.捕獲異常,如果在執行try塊的過程中沒有出現異常,則跳過catch字句。如果try塊中的某條語句拋出一個異常,java會跳過try塊中剩餘的語句,然後開始查找處理這個異常代碼的過程。處理這個異常的代碼稱爲異常處理器。可以從當前的方法開始,沿着方法調用鏈,按照異常的反向傳播方向找到哦這個處理器。


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