Java学习之异常处理try{...}catch{...}finally{...}

package javaObject;

import java.io.UnsupportedEncodingException;
import java.util.Arrays;

public class javaError {
	public static void main(String[] args) {
		/*
		 * 所谓错误,就是程序调用某个函数的时候,如果失败了,就表示出错。
		 * 
		 * 方法一:约定返回错误码。
		 * 方法二:在语言层面上提供一个异常处理机制。
		 * java内置了一套异常处理机制,总是使用异常来表示错误。
		 * 异常是一种class,因此它本身带有类型信息。异常可以在任何地方抛出,但只需要在上层捕获,这样就和方法调用分离了
		 * 
		 * Throwable有两个体系:
		 * 1 Error,表示严重的错误,程序对此一般无能为力。如内存耗尽 OutOfMemoryError, 无法加载某个类NoClassDefFoundError,栈溢出 StackOverflowError
		 * 2 Exception,表示运行时的错误,它可以被捕获并处理,分为两大类
		 * (1)RuntimeException以及它的子类
		 * (2)非 RuntimeException
		 * 
		 * Java规定:
		 * 必须捕获的异常,包括Exception及其子类,但不包括RuntimeException及其子类,这种类型的异常称为Checked Exception。
		 * 不需要捕获的异常,包括Error及其子类,RuntimeException及其子类。
		 * 
		 * 捕获异常使用try...catch语句,把可能发生异常的代码放到try {...}中,然后使用catch捕获对应的Exception及其子类。
		 * 
		 */
		
		
		int[] ages = {1,2};
		//
		try {
			System.out.println("第一个元素值是:" + ages[-1]);
		} catch (Exception e) {
			// TODO: handle exception
			System.out.println("异常信息:" + e);
		}
		//
		try {
			// try 正常执行
			System.out.println("第三个元素值是:" + ages[2]);
		} catch (Exception e) {
			// catch 捕获并抛出异常
			System.out.println("异常信息:" + e);
		} finally {
			// finally 出现在 catch 代码块最后,且不论正常与否总会被执行。
			System.out.println("第三个元素值是:" + 0);
		}

		// 异常,程序中止
//		System.out.println("第三个元素值是:" + ages[2]);
		
		MineBankMoney mineBank = new MineBankMoney(100);
		mineBank.showMoney();
		mineBank.saveMoney(98);
		mineBank.showMoney();
//		mineBank.fetchMoney(310);
		try {
			mineBank.fetchMoney(310);
		} catch (BankMoney e) {
			// TODO: handle exception
			System.out.println("取钱失败:" + e.showMessage());
		}
		mineBank.showMoney();
	}
}

// 自定义异常
class BankMoney extends Exception {
	private double money;
	
	public BankMoney(double money) {
		this.money = money;
	}
	public double getMoney() {
		return this.money;
	}
	public String showMessage() {
		return "余额不足,还差" + this.money + "元.";
	}
}

class MineBankMoney {
	private double money;
	private int number;
	
	public MineBankMoney(double money) {
		this.money = money;
	}
	
	public void checkNumber(int number) {
		this.number = number;
	}
	public void saveMoney(double money) {
		this.money += money;
	}
	// 抛出异常
	public void fetchMoney(double money) throws BankMoney {
		if (money <= this.money) {
			this.money -= money;
		} else {
			double needs = money - this.money;
			throw new BankMoney(needs);
		}
	}
	
	public double showMoney() {
		System.out.println("卡内余额:" + this.money);
		return this.money;
	}
	public int showNumber() {
		System.out.println("卡号:" + this.number);
		return this.number;
	}
}
发布了804 篇原创文章 · 获赞 135 · 访问量 142万+

猜你喜欢

转载自blog.csdn.net/potato512/article/details/103248260