2. 自定义异常
要求:乘坐公交车刷卡操作。定义公交卡类,若刷卡金额大于余额,则作为异常处理。
步骤:
(1)产生异常的条件是余额少于刷卡金额,是否抛出异常要先对该条件做判断,确定产生异常的方法,在刷卡方法中产生异常。
(2)处理异常安排在调用刷卡方法中,刷卡方法抛出异常,由上一级调用方法捕获并处理。
(3)定义异常。
package ex_7_5;
class buscard{
String name;
double balance;
buscard(String name,double balance){
this.name=name;
this.balance=balance;
}
}
class MyException extends Exception{
private String myString;
public MyException(String myString){
this.myString=myString;
}
public String getMyString(){
return myString;
}
@Override
public String toString(){
return myString;
}
}
public class ex_7_5 {
public static double slotcard(double x,buscard A)throws MyException{
if(A.balance-x<0)
throw new MyException("余额不足!刷卡失败!");
else
return A.balance-x;
}
public static void main(String[] args){
buscard A=new buscard("Chen",0.5);//测试用到:0.5,1
double x;
x=1;
try{
A.balance=slotcard(x,A);
System.out.println("刷卡成功!余额为:"+A.balance);
}catch(MyException e){
System.out.println("!");
}
}
}
程序存在一些问题,望高手帮帮忙。
附:为什么这样输出的异常是“!”却不是("余额不足!刷卡失败!")
------解决方案--------------------
- Java code
把System.out.println("!");改为:e.printStackTrace();
------解决方案--------------------
或者改成
System.out.println(e.getMyString());
------解决方案--------------------
- Java code
public static void main(String[] args) { buscard A = new buscard("Chen", 0.5);// 测试用到:0.5,1 double x = 1; try { A.balance = slotcard(x, A); System.out.println("刷卡成功!余额为:" + A.balance); } catch (MyException e) { System.out.println("!"); } }
------解决方案--------------------