异常处理内容太多,就不写了,直接看看小明遇到的题目。
作业一:
设计一个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("程序执行结束!!!");
}
}
各位如果文章出现错误,希望各位大佬给予指出!!!菜鸟先飞了。