1. 程式人生 > >【JAVASE】Java同時丟擲多個異常

【JAVASE】Java同時丟擲多個異常

Java有異常丟擲後,跳出程式,一般無法執行接下來的程式碼。

大家做登陸功能,經常會有使用者名稱和密碼的登陸校驗,使用者名稱或者密碼錯誤,如果一般是提示使用者名稱或者密碼錯誤,因為一般無法同時丟擲兩個異常資訊。我們如何來做到同時丟擲多個異常呢? 可以把多個異常資訊放到list中,然後一起丟擲即可。

我們接下來定義自己的異常類。

import java.util.ArrayList;
import java.util.List;

/**
 * 自定義異常類
 * 
 * @author gm
 */
public class MyException extends Exception {

	/**
	 * 序列化ID
	 */
	private static final long serialVersionUID = 1L;
	/**
	 * 用於報錯多個異常
	 */
	private List<Throwable> causes = new ArrayList<Throwable>();

	/**
	 * 建構函式新增所有異常
	 * 
	 * @param _causes
	 */
	public MyException(List<? extends Throwable> _causes) {
		causes.addAll(_causes);
	}

	/**
	 * 獲取所有Exceptions
	 * 
	 * @return List<Throwable>
	 */
	public List<Throwable> getException() {
		return causes;
	}
}

------------------------------------------------------------------------

異常類定義好後,同時丟擲兩個異常。

import java.util.ArrayList;
import java.util.List;

public class ExcepitonTest {

	public static void main(String[] args) throws MyException {
		try {
			doException();
		} catch (MyException e) {
			e.printStackTrace();
			throw new MyException(e.getException());
		}
	}

	public static void doException() throws MyException {
		List<Throwable> list = new ArrayList<Throwable>();
		int num1 = 1;
		int num2 = 0;
		int result = 0;

		try {
			result = num1 / num2;
		} catch (Exception e) {
			list.add(e);
			System.out.println("第一個異常");
		}

		try {
			result = num1 / num2;
		} catch (Exception e) {
			list.add(e);
			System.out.println("第二個異常");
		}

		if (list.size() > 0) {
			throw new MyException(list);
		}
	}
}

看一下。。。。異常資訊