1. 程式人生 > >JAVA基礎之異常處理

JAVA基礎之異常處理

我們在程式執行的過程中出現錯誤時很正常的,出錯,我們的程式碼執行就會停止,那麼我們可以使用異常處理來幫助程式設計師檢查可能出現的問題。

1.java中異常的分類,分為:java.lang.Error和java.lang.Exception,java.lang.Throwable類是兩種的父類。

2.java異常處理機制。

2.1捕獲異常

2.2宣告丟擲異常

3.異常處理

異常處理共涉及五個關鍵字:try,catch,throw,throws,finally。

自行處理:可能引發異常的語句封裝在try在,而處理異常的語句在catch內。

丟擲異常:在方法宣告中包括throws子句,通知呼叫者,如果發生了異常,必須有呼叫者處理。

異常的例子:

package com.dh.ch06;
/**
 * 測試異常的發生
 */
public class ExceptionDemo {
	public static void main(String[] args) {
		// 0做除數
		int i = 12 / 0;
		System.out.println("結果是:" + i);
	}
}

很明顯會發生異常:

Exception in thread "main" java.lang.ArithmeticException: / by zero
	at com.dh.ch06.ExceptionDemo.main(ExceptionDemo.java:8)

try catch例子:

package com.dh.ch06;

public class TryCatchDemo {
	public static void main(String[] args) {
		//定義一個String變數,值為null
		
		String str = null;
		try {
			if (str.equals("hello")) {
				System.out.println("hello java");
			}
		} catch (NullPointerException e) {
			System.out.println("空指標異常");
		}
	}
}
空指標異常

多重catch異常處理例子:

package com.dh.ch06;

import java.util.Scanner;

/**
 * 多重catch的使用方法
 */
class MoreCatchDemo {

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int a[] = new int[2];
		try {
			// 從鍵盤獲取一個字串
			String str = scanner.next();
			// 將字串轉換成整數(會引發NumberFormatException)
			int num1 = Integer.parseInt(str);
			// 從鍵盤獲取一個整數
			int num2 = scanner.nextInt();
			// 將兩個數相除(會引發Exception),並賦值給a[1]
			a[1] = num1 / num2;
			// 給a[2]賦值(引發ArrayIndexOutOfBoundsException)
			a[2] = num1 * num2;
			System.out.println("OK!");

		} catch (ArrayIndexOutOfBoundsException ex) {
			System.out.println("陣列越界異常!");
		} catch (NumberFormatException ex) {
			System.out.println("數字轉換異常!");
		} catch (Exception ex) {
			System.out.println("其他異常!");

		}
	}
}

你輸入的內容不同會引發不一樣的異常。

當一個catch語句捕獲到異常的的時候,後面的catch是不會再執行的。捕獲異常的順序和catch語句的順序有有關,所以我們在安排catch語句的時候要先安排特殊的異常,然後是一些普通的異常。

巢狀異常處理:

在使用巢狀的try塊時,將先執行內部的try,如果沒有遇到匹配的catch快,則將檢查外部的try catch。

package com.dh.ch06;

import java.util.Scanner;

/**
 * 巢狀try-catch的使用
 */
public class NestedExceptionDemo {
	public static void main(String[] args) {
		try {
			try {
				Scanner scanner = new Scanner(System.in);
				// 從控制檯中傳入兩個引數
				int number1 = Integer.parseInt(scanner.next());
				int number2 = Integer.parseInt(scanner.next());
				// 求商運算
				double result = number1 / number2;
				System.out.println("the result is " + result);
			} catch (NumberFormatException e) {
				System.out.println("數字格式轉換異常!");
			}
		} catch (ArithmeticException e) {
			System.out.println("0做除數無意義!");
		}
	}
}

finally,在某些特定的情況下,不管是否有異常,都要執行一些語句,比如資料庫連線時,不管對資料庫的操作是否成功,最後都需要關閉資料庫。

package com.dh.ch06;

/**
 * try-catch-finally的使用,模擬資料的操作
 */
public class FinallyDemo {

	public static void main(String[] args) {

		System.out.println("請開啟資料庫連線......");
		try {
			System.out.println("執行查詢操作");
			System.out.println("執行修改操作");
			// 使用0做除數
			int i = 12 / 0;
			System.out.println("結果是:" + i);
		} catch (Exception ex) {
			System.out.println("除零出錯!");

		} finally {
			System.out.println("請關閉資料庫連線......");
		}

	}
}

4。自定義異常:

自定義異常只需建立一個類繼承Execption即可,

在程式中使用自定義的異常,可以分為這幾個步驟:

(1):建立自定義異常類

(2):在方法中通過throw關鍵字丟擲異常物件

(3)如果在當前丟擲異常的方法中處理異常,可以使用try——catch語句塊來捕獲並處理,否則在方法中生宣告throws關鍵字指明要拋給的呼叫者的異常。

(4):在出現異常的方法呼叫者中處理異常。

例子:


package com.dh.ch06;

public class MyExecption extends Exception{
	public MyExecption(String ErrorMessage){
		super(ErrorMessage);
	}
}
/**
 * 
 */
package com.dh.ch06;

import java.nio.charset.MalformedInputException;

public class Tran {
	public static int vag(int a,int b) throws MyExecption{
		if(a<0 || b<0){
			throw new MyExecption("不可以為負數");
		}
		if(a>100 || b>100){
			throw new MyExecption("不能大於100");
		}
		return a+b;
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try{
			int result = vag(100,120);
			System.out.println(result);
		}catch(MyExecption e)
		{
			System.out.println(e.getMessage());
		}
	}

}

5.在方法中丟擲異常:

throws關鍵字主要在宣告方法的時候丟擲異常,多個異常可以用逗號隔開。

例子:


package com.dh.ch06;
public class Shoot {
	public static void pop()throws NegativeArraySizeException {
		int a[] = new int[-3];
	}
	public static void main(String[] args){
		// TODO Auto-generated method stub
		try{
			pop();
		}catch(NegativeArraySizeException e){
			System.out.println("pop方法出錯");
		}

	}

}

下一篇是集合與泛型

https://mp.csdn.net/postedit/84493028