实验题目
一、 实验目的
1、了解 Java 中的异常类。
2、学会使用异常模式 try-catch-finally。
3、掌握自定义异常处理。
二、实验环境
1、硬件环境:个人 PC 机
2、软件环境:windows 操作系统+JDK1.8 或以上+Eclipse 或 Idea
三、实验内容
编写一个程序,使用异常处理模式、系统给定的处理方式,自己编写一个异常并做处理。 题目:编写一个银行类 Bank,要求如下“:
(1)变量 balance 为存款余额;
(2)deposite()方法为存款操作;
(3)withdrawa()方法为取款操作;
(4)getbalawal()方法为获取余额操作,如果余额少于取款额时,显示当前余额,并告知不能取款的提醒,否则显示取款成功的信息。要求自义定异常来处理余额不足的 问题。
四、注意事项
1、理解系统异常处理的机制和创建自定义异常的方法。
2、掌握异常的定义、抛出方法及如何捕获并处理异常。
实验操作
1.自定义异常创建
首先要创建一个异常类,来继承Throwable类,其关系图如下
这里根据上面的题目要求,创建如下异常
需要注意的是:
- Error(错误):通常是灾难性的致命错误,不是程序可以控制的,如内存耗尽、JVM系统错误、堆栈溢出等。应用程序不应该去处理此类错误,且程序员不应该实现任何Error类的子类。
- Exception(异常):用户可能捕获的异常情况,可以使用针对性的代码进行处理,如:网络连接中断、数组下标越界等。
public class IllegalNumberException extends Throwable{
public class illegalNumberException extends Exception {
public illegalNumberException() {
}
public illegalNumberException(String message) {
super(message);
}
}
}
2.创建Bank类
import java.util.Scanner;
public class Bank {
private int balance; //存款余额
private int withdraw; //需要取出的余额
private int deposit; //需要存储的余额
public void setBalance(int balance) {
if(balance < 0) {
System.out.println("输入余额不能为负数哦! ");
} else {
this.balance = balance;
}
}
public int getBalance() {
return balance;
}
public int getWithdraw() {
return withdraw;
}
public int getDeposit() {
return deposit;
}
public void setWithdraw(int withdraw) {
this.withdraw = withdraw;
}
public void setDeposit(int deposit) {
this.deposit = deposit;
}
public Bank() {
}
public Bank(int balance) throws IllegalNumberException {
if(balance < 0) {
throw new IllegalNumberException();
}
this.balance = balance;
}
// 存款操作
public void deposite() {
System.out.println("请输入存款金额");
Scanner scan = new Scanner(System.in);
deposit = scan.nextInt();
setDeposit(deposit);
balance = balance + deposit;
getbalawal();
}
// 取款操作
public void withdrawa() throws IllegalNumberException{
System.out.println("请输入取款金额");
Scanner scan = new Scanner(System.in);
withdraw = scan.nextInt();
if(withdraw > balance) {
throw new IllegalNumberException();
} else {
setWithdraw(withdraw);
balance = balance - withdraw;
}
}
// 获取余额操作
public void getbalawal() {
System.out.println("您当前余额为: "+balance);
}
}
3.创建运行类
import java.util.Scanner;
public class BankMain {
public static void main(String[] args) {
Bank bank = new Bank();
while(true) {
System.out.println("--------[银行菜单选择]---------");
System.out.println("1. 存款");
System.out.println("2. 取款");
System.out.println("3. 查询当前余额");
Scanner scan = new Scanner(System.in);
int x = scan.nextInt();
switch (x)
{
case 1:
bank.deposite();
break;
case 2:
try{
bank.withdrawa();
} catch (IllegalNumberException e) {
throw new RuntimeException("您的余额不足,当前余额为:"+bank.getBalance());
}
break;
case 3:
bank.getbalawal();
break;
default:
throw new IllegalStateException("输入了没有功能的按钮: " + x);
}
}
}
}
运行结果如下:
可以看到,当我们取款大于了余额时,程序就会报错,并且强制终止,也可以用多线程来实现一个更加安全的写法。
4.实验总结
- Java异常强制用户去考虑程序的健壮性和安全性,异常处理不用来控制程序的正常流程,其主要作用是捕获程序在运行时发生的异常并进行相应的处理
-
异常是程序由于各种原因导致无法正常运行的一个事件,这个事件是由一个异常对象来代表的,这个对象的产生取决于产生异常的类型,可能由应用程序本身产生,也可能由Java虚拟机产生。