JAVA_異常處理

waylonZXH發表於2018-11-21

實驗目的

1.瞭解異常的基本概念,及其異常類的層次關係
2.理解異常處理機制
3.掌握使用try-catch-finally處理異常的方法
4.掌握使用throws、throw宣告丟擲異常的方法
5.掌握自定義異常的定義與使用

實驗內容

1.(ArrayIndexOutOfBoundsException異常)編寫一個程式,建立一個長度為10的一維陣列。提示使用者輸入陣列下標,然後顯示對應的元素值。如果輸入的下標越界,就顯示訊息“您輸入的陣列下標越界”。

2.(InputMismatchException異常)編寫一個程式,提示使用者輸入兩個整數,然後顯示它們的和,如圖8-3所示。如果使用者輸入的資料型別不正確時,提示使用者“您輸入的資料型別不正確,無法進行求和計算!”。

3.編寫程式完成下列需求:
(1)設計一個自定義異常類NegativeException,這個類包括:
a)一個私有成員變數content(異常資訊,String型,只讀)及其getter和setter方法。
b)一個有參構造方法,能建立指定異常資訊的自定義異常物件。
(2)設計一個賬戶類Account,這個類包括:
c)2個私有成員變數:id(賬戶ID,String型,只讀),balance(賬戶餘額,double型,只讀)。
d)一個有參構造方法,能建立一個指定id,賬戶餘額為0的賬戶。
e)這兩個私有成員變數的getter和setter方法。
f)一個名為deposit的方法向賬戶存入特定金額money。若存款金額小於0,則丟擲自定義異常(NegativeException),提示“存款金額不能小於0!”;否則將存款金額累加到賬號餘額中,並提示“成功存款元。”。
g)一個名為withDraw的方法從賬戶提取特定金額money。若取款金額小於0,則丟擲自定義異常(NegativeException),提示“取款金額不能小於0!”;若賬戶餘額不足,則丟擲異常(Exception),提示“餘額不足,取款失敗!”;否則,從賬戶餘額中扣除取款金額,並提示“成功取款元。”。
(3)在測試程式AccountTest中使用如下程式碼驗證異常處理的結果。

程式碼:

package lab08_443;

import java.util.InputMismatchException;
import java.util.Scanner;

public class Test08_test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int a[]= {0,1,2,3,4,5,6,7,8,9};
		try {
			System.out.println(a[15]);
		}catch(ArrayIndexOutOfBoundsException ex){
			System.out.println("您輸入的陣列下標越界");
		}
		System.out.println("程式碼繼續執行了");
		Scanner b=new Scanner(System.in);
			
		try {
			int x=b.nextInt();
			int y=b.nextInt();
			System.out.println(x+y);
		}catch(InputMismatchException ex) {
			System.out.println("您輸入的資料型別不正確,無法進行求和計算!");
		}
		
	}

}

package lab08_443;

public class Account {
	private final String id;
	private double balance;
	public Account(String id){
		this.id=id;
		this.balance=0;
	}
	public void deposit(double money) {
		try {
			if(money<0) {
				throw new NegativeException("存款金額不能小於0!");
			}else {
				this.balance+=money;
				System.out.println("成功存款"+money+"元。");
			}
		}catch(NegativeException ex){
			System.out.println(ex.getContent());
		}
	}
	public void withDraw(double money) {
		try {
			if(money<0) {
				throw new NegativeException("取款金額不能小於0!");
			}else if(getBalance()<money) {
				throw new Exception("餘額不足,取款失敗!");
			}else {
				this.balance-=money;
			}
		}catch(NegativeException ex) {
			System.out.println(ex.getContent());
//			
		}catch(Exception ex) {
			System.out.println(ex.getMessage());
//			System.out.println("餘額不足,取款失敗!");
		}
	}
	
	
	public String getId() {
		return id;
	}
	public double getBalance() {
		return balance;
	}
	public void setBalance(double balance) {
		this.balance=balance;
	}
}
package lab08_443;

public class AccountTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Account a=new Account("1001");
		a.deposit(-3000);
		a.deposit(3000);
		System.out.println("賬戶ID"+a.getId()+",餘額:"+a.getBalance());
		System.out.println("-----------------------");
		a.withDraw(1000);
//		a.withDraw(-500);
		System.out.println("賬戶ID"+a.getId()+",餘額:"+a.getBalance());
		a.withDraw(5000);
		System.out.println("賬戶ID"+a.getId()+",餘額:"+a.getBalance());
	}

}
package lab08_443;

public class NegativeException extends Exception  {
	private final String content;
	public NegativeException(String content) {
		this.content=content;
	}
	public String getContent() {
		return this.content;
	}
}