Java习题>|异常>|throw自定义异常小案例
throw自定义异常小案例
<mark>题目</mark>
模拟实现用户购买商品的功能,使用数组模拟商品列表,当购买的商品不存在或者商品库存为0时,抛出自定义异常。用户购买某一个商品时,对异常进行处理,并对库存进行改变。
- 首先创建商品实体
@Setter
@Getter
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Goods {
private int id;//商品id
private String name;//商品名
private int store;//商品库存
private int price;//商品价格
}
此处使用的lombok插件添加注解详情
- 创建一个类写购买商品的方法
public class Exception2 {
public static Goods[] goods;
//初始化商品数组
public static Scanner input;
//初始化输入Scanner
//初始化商品数据
static {
goods = new Goods[3];
input = new Scanner(System.in);
goods[0] = new Goods(1,"apple", 10, 8000);
goods[1] = new Goods(2,"apple", 5, 3500);
goods[2] = new Goods(3,"apple", 8, 4200);
}
//main方法调用购买商品的方法
public static void main(String[] args) {
try {
buygood();
} catch (BuyGoodsException e) {
System.out.println(e.getMessage());
}
}
private static void buygood() {
showGoods();
System.out.println("请输入要买的商品id");
int goodId = input.nextInt();
//初始化一个要购买的商品
Goods buygood = null;
//设置变量
boolean flag = false;
for (Goods good : goods) {
if(good==null){
break;
}
//循环遍历商品数组中的每一个数组与输入的商品Id对比查看是否存在该商品
if(good.getId() == goodId){
buygood = good;
//如果找到该商变量变为true
flag = true;
//结束循环
break;
}
}
//如果!flag==true说明flag=falsh为初始化值没有进入循环内的判断没有找到该商品
//抛出自定义异常
if(!flag){
throw new BuyGoodsException("商品不存在");
}
System.out.println("您购买的商品信息如下");
System.out.println(buygood);
System.out.println("请输入要购买"+buygood.getName()+"的数量");
int buynum = input.nextInt();
//当购买数量大于商品内存的时候抛出异常
if(buynum>buygood.getStore()){
throw new BuyGoodsException("该商品库存不足");
}
System.out.println("购买"+buygood.getName()+buynum+"个"+"共计"+buynum*buygood.getPrice());
//重新设置商品的库存
buygood.setStore(buygood.getStore()-buynum);
//展示购买完商品的信息
showGoods();
}
//展示所有商品信息方法
private static void showGoods() {
//循环商品数组
for (Goods good : goods) {
//如果商品不等于空展示该商品
if (good != null) {
System.out.println(good);
}
}
}
}
-
写自定义异常类
public class BuyGoodsException extends RuntimeException { //自定义的异常类必须继承Exception的子类RuntimeException //当然也可以继承Exception那么这个自定义异常类就变成了编译时异常 //必须处理 private String msg; public BuyGoodsException(String msg) { super(msg); } //此处的构造方法必须重写父类的放方法。 }
初来乍到有写的不对的欢迎指教