一篇文章看懂Java異常處理

異常的定義

在java中,異常就是java在編譯、運行或運行過程中出現的錯誤

總共有三種:1.編譯錯誤 2.運行錯誤 3.邏輯錯誤

1.編譯錯誤是因為程序沒有遵循語法規則,編譯程序能夠自己發現並且提示我們錯誤的原因和位置,這個也是新手在剛接觸編程語言時經常遇到的問題。

2.運行時錯誤是因為程序在執行時,運行環境發現瞭不能執行的操作。

3.邏輯錯誤是因為程序沒有按照預期的邏輯順序執行。異常也就是指程序運行時發生錯誤,而異常處理就是對這些錯誤進行處理和控制。

package org.oracle.test;

public class TryDemo9 {
    public static void main(String[] args) {
    	        System.out.println(1/0);//0不能做除數
    	  
    	        System.out.println("你好");//程序捕獲異常,程序終止,不執行
    }
}

在代碼執行過程中遇到異常就會終止

運行的結果裡會告訴我們異常的類型,異常出現的位置

異常的分類

RuntimeException:運行時異常,一般不手動處理,出問題瞭再處理。

其他Exception:必須要經過手動處理。

Error:一般指的是系統級錯誤。

異常的處理方法

try…catch處理

package org.oracle.test;
import java.util.Scanner;
public class TryDemo2 {
	public static void main(String[] args) {
		System.out.println(testOne());
	}	
	/*
	 *  當try、catch、finally代碼塊中都有return語句,
	 *  程序無論報錯與否都會執行finally裡面的renturn語句
	 */
	public static double testOne() {
		try {
			Scanner sc = new Scanner(System.in);
			System.out.println("請輸入第一個數字:");
			int a = sc.nextInt();
			System.out.println("請輸入第二個數字:");
			int b = sc.nextInt();
			int result = a / b;
//			System.out.println("result:" + result);
			System.out.println("執行瞭try塊");
			return result;		
		}catch (Exception e) {
			e.printStackTrace();
			return 0;
		}finally {
			return -1000;
		}
	}
}

運行結果:

try– 用於監聽。將要被監聽的代碼(可能拋出異常的代碼)放在try語句塊之內,當try語句塊內發生異常時,異常就被拋出。

catch– 用於捕獲異常。catch用來捕獲try語句塊中發生的異常。

finally– finally語句塊總是會被執行。它主要用於回收在try塊裡打開的物力資源(如數據庫連接、網絡連接和磁盤文件)。

throw 和throws

throws表示方法準備要扔出來一個異常

throw表示向外拋出異常

package org.oracle.test;

import java.util.InputMismatchException;

public class TryDemo8 {
	public static void main(String[] args) {
		try {
			testThree();
		} catch (Exception e) {
			System.out.println(e.getMessage());
			e.printStackTrace();
		}
	}
	public static void testOne() throws InputMismatchException{
		throw new InputMismatchException();
	}
	public static void testTwo() throws Exception {
		try {
			testOne();
		} catch (InputMismatchException e) {
			throw new Exception("新異常1",e);
		}
	}

	public static void testThree() throws Exception {
		try {
			testTwo();
		} catch (Exception e) {
			Exception e1 = new Exception("新異常2");
			e1.initCause(e);
			throw e1;
		}
	}
}

運行結果:

自定義異常

自定義異常:直接繼承Exception或者RuntimeException來是實現自定義異常

package org.oracle.test;

import java.util.Scanner;

public class TryDemo6 {

	public static void main(String[] args){
		try {
			hotelRule();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/*
	 * 	基帝開瞭個情侶酒店,基帝酒店規矩:18歲以下和80歲上以上客戶,需要傢人陪同入住
	 */
	public static void hotelRule() throws Exception {
		Scanner sc = new Scanner(System.in);
		System.out.println("請輸入客戶年齡:");
		int age = sc.nextInt();
		if(age < 18 || age > 80) {
			throw new HotelException();
		}else {
			System.out.println("成功入住");
		}
	}

}

package org.oracle.test;
/*
 * 自定義異常需繼承Exception
 */
public class HotelException extends Exception{

	public HotelException() {
		super("由於年齡問題,無法入住");
	}
	
}

運行結果:

總結

到此這篇關於Java異常處理的文章就介紹到這瞭,更多相關Java異常處理內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: