实验目的
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;
}
}