自定义异常类与自定义异常类的练习
自定义异常类
为什么需要自定义异常类:
我们说了Java中不同的异常类,分别表示着某一种具体的异常情况,那么在开发中总是有些异常情况是SUN没有定义好的,此时我们根据自己业务的异常情况来定义异常类。例如年龄负数问题,考试成绩负数问题等等。
在上述代码中,发现这些异常都是JDK内部定义好的,但是实际开发中也会出现很多异常,这些异常很可能在JDK中没有定义过,例如年龄负数问题,考试成绩负数问题.那么能不能自己定义异常呢?
什么是自定义异常类:
在开发中根据自己业务的异常情况来定义异常类.
自定义一个业务逻辑异常: RegisterException。一个注册异常类。异常类如何定义:
1.自定义一个编译期异常:自定义类并继承于java.lang.Exception 。
2.自定义一个运行时期的异常类:自定义类并继承于java.lang .RuntimeException 。
为什么要自定义异常类?
当我们在输入成绩,输入工资,取款的时候,往往都有一个范围,而这个范围不是JVM能够识别的,因此在输入的时候就容易出错,因此在这些时候JDK中的异常无法满足我们的需求,我们只能自己定义异常类。
如何自定义异常类?
可以通过继承Exception来派生自己的子异常类。
而Exception中常用的构造方法:+Exception(),+Exception(message:String),+Exception(message:String,Throwable ex)也可以被子类用super调用。
class BalanceException extends Exception { double balance; public BalanceException(double balance) //构造方法 { super("余额不足!"+balance); //调用Exception(message:String) } }
自定义了一个异常类,
public class Test { public static void main(String[] args)throws Exception //声明异常类型 { Account ac=new Account(); //创建一个账户类 boolean continueInput=true; //设置一个管理循环的变量 do { try //测试与捕获异常 { System.out.println("Enter the money:"); ac.withdraw(new Scanner(System.in).nextDouble()); continueInput=false; } catch(BalanceException ex) { System.out.println(ex.getMessage()); System.out.println("Reset the money!"); } }while(continueInput); System.out.println("Finish this action!"); } } class Account //创建账户类 { double balance=5000; public void withdraw(double money)throws BalanceException //声明可能会发生异常 { if(money>this.balance) { throw new BalanceException(balance); //抛出异常对象 } else balance-=money; } }
自定义异常类的练习
要求:我们模拟注册操作,如果用户名已存在,则抛出异常并提示:亲,该用户名已经被注册。分析:
1.使用数组保存已经注册过的用户名(数据库)
2.使用scanner获取用户输入的注册的用户名(前端,页面)3.定义一个方法,对用户输入的中注册的用户名进行判断
遍历存储已经注册过用户名的数组,获取每一个用户名使用获取到的用户名和用户输入的用户名比较
true:
用户名已经存在,抛出RegisterException异常,告知用户“亲,该用户名已经被注册";false:
继卖遍历比较
如果循环结束了,还没有找到重复的用户名,提示用户"恭喜您,注册成功! ";