Java异常处理浅学

异常处理内容太多,就不写了,直接看看小明遇到的题目。

作业一:

       设计一个Java程序,有数组a[] = {60, 70, 80, 90, 100}与b[] = {0,7,80};求数组c[] = a[i]/b[i],请处理此程序所发生的任何异常:(ArrayIndexOutOfBoundsException)、(ArithemeticException);

该题题目中已经进行了出现异常类型的提醒,所以及比较好完成(代码如下):

public class TestException {
    public static void main(String[] args) {
    	
    	int[] a = {60, 70, 80, 90, 100};
    	int[] b = {0, 7, 80};
    	int[] c = new int[5];//数组c,可以去除,只是名存而实亡
        try {
    	      for (int i = 0;i < a.length;i++) {
    	    	    c[i] = a[i]/b[i];
    		        System.out.println("c["+i+"]="+"a["+i+"]/b["+i+"]="+c[i]);
    	      }
        }
        catch(ArithmeticException e) {
    	           System.out.println("算术错误!"+e.toString());
        }
        catch(ArrayIndexOutOfBoundsException e) {
    	      System.out.println("数组下标越界"+e.toString());
        }
        //catch(Exception e) {System.out.println("出现异常!");}
        System.out.print("程序运行结束!!!");
   }
}

作业二:有关自定义异常并使用

      内容1、创建异常类OverDrawnException———当取出钱后余额小于10的情况。该类继承Excoption类,并覆盖该类的public String toString ()方法,返回提示信息 “存款不能为负数”;

             2、创建异常类DepositException———当无效钱数(小于0)存入时。该类继承Excoption类,并覆盖该类的public String toString ()方法,返回提示信息“存款不能为负数”;

             3、在Bank类的boolean  take(double num)方法中,如果发现(余额-num<=10) 则抛出一个OverDrawnException,并在take方法在进行捕获,捕获后打印异常的toString返回的信息;

           4、在void  save(double num)方法中,发现num小于0,则抛出一个DepositException异常,并在方法头中申明save方法自身不处理该异常,由调用它的函数处理(提示:TestBank1类的main函数处理);

           5、写一个测试程序,写代码实现下列过程:新建一个帐户,开户信息为("007", "大耳朵图图", "翻斗大街翻斗花园二号楼1001室", 200),存入90元,再存入-90元,取款290元。捕获所有可能发生异常。

该题由于实力较菜,所以只是进行了一个简单的银行的用户测试,并没有将银行用户所有的功能实现,如有不妥之处,欢迎大佬指出!!!

实现代码如下:

1、首先是银行类:

/**
 在Bank类中关于用户有以下几个属性:账户号(id),姓名(name),地址(address),余额(balance) 
*/

/*银行类*/
class Bank {
	String id; 
	String name;
	String address;
	double balance;
	void setMessage() {}
	void setMessage(String id,String name,String address,double balance) {
		this.id = id;
		this.name = name;
		this.address = address;
		this.balance = balance;
	}
	void save(double num) throws DepositException {
		if(num <0) {
			throw new DepositException();
		}
		else {
			System.out.println("恭喜你成功存入"+num+"元");
			this.balance +=num;
			System.out.println("你的账户余额为:"+this.balance+"元");
		}
	}
	boolean take(double num) {
		if(this.balance-num <= 10 || num < 0) {          //取出的金额不能是负数
			try {
				throw new OverDrawnException();
			}catch(OverDrawnException e) {
			        System.out.println(e.toString());
		    }
			return false;
		}
		else {
			    this.balance -=num;
			    System.out.println("成功取出"+num+"元");
			    System.out.println("你的账户余额为:"+this.balance+"元");
		        return true;
	   }
	}
}

2、根据题目,要自定义异常(别慌,咱也不知道会不会,看下面):

/*自定义异常OverDrawnException*/
class OverDrawnException extends Exception{
     /*记住要进行方法覆盖*/
     public String toString() {
    	 return "存款不能为负数";
     }	
}


/*自定义异常DepositException*/
class DepositException extends Exception{
    /*记住要进行方法覆盖*/
	public String toString() {
		return "存款不能为负数";
	}
}

3、简单但不草率的来个测试,要测试啥?题目内容里都有(请欣赏拙劣的代码,影片待会就结束):

/*进行测试*/
public class TestBank {
	public static void main(String[] args) {
     Bank user1 = new Bank();
     user1.setMessage("007", "大耳朵图图", "翻斗大街翻斗花园二号楼1001室", 200);
     try {
     user1.save(90);
     user1.save(-90);
     }
     catch(DepositException e) {
    	   System.out.println(e.toString());
     }
     catch(Exception e) {
    	 System.out.println("存款异常");
     }
     user1.take(290);       //可以放在finally{}中
     System.out.print("程序执行结束!!!");
	}
}

 更新:测试类太草率?还是来个有趣的菜单选择(注意注释掉两条语句,防止重复打印,让布尔更单纯):

	/*方法的更改,防止重复输出*/
boolean take(double num) {
		try {
		       if(num < 0 || this.balance-num <= 10) 
		           throw new OverDrawnException();                  //抛出异常
		       else {
			           this.balance -= num;
			          // System.out.println("成功取出"+num+"元");
			          // System.out.println("你的账户余额为:"+this.balance+"元");
		               return true;
		       }
		}
		catch(OverDrawnException e) {                                //捕获异常并解决
			        System.out.println(e.toString());
			        return false;
		}
}
/**
 在Bank1类中关于用户有以下几个属性:id(账户号),姓名name,地址address,余额(balance)
 */
import java.util.Scanner;
public class TestBank1 {
	public static void main(String[] args) {
     Bank1 user1 = new Bank1();
     user1.setMessage("007", "大耳朵图图", "翻斗大街翻斗花园二号楼1001室", 200);
     boolean a = true;
     while(a) {
    	 Scanner sc = new Scanner(System.in);
 		System.out.println("请输入你的选择:1、存款     2、取款     3、查询余额      4、退出");
 	    int option = sc.nextInt();
    	 switch(option) {    	 
    	 case 1:
				System.out.println("请输入您要存入的金额:");
				double money = sc.nextInt();
				try {
				       user1.save(money);
				}catch(DepositException e) {
					   System.out.println(e.toString());
				}	
				break;
			case 2:
				System.out.println("请输入您要取款的金额:");
				double m = sc.nextInt();
				if(user1.take(m)) {
					System.out.println("恭喜您成功取出:"+m+"元");
				    System.out.println("您的账户余额为:"+user1.balance+"元");
				}
				else 
					System.out.println("对不起,可能您输入的金额有误!!!");
				break;
			case 3:
				System.out.println("您的账户余额为:"+user1.balance+"元");
			    break;
			case 4:
				sc.close();
				a = false;
				break;
    	 }
     }
     System.out.print("程序执行结束!!!");
   }
}

各位如果文章出现错误,希望各位大佬给予指出!!!菜鸟先飞了。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值