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("!");
}
}
}
程序存在一些问题,望高手帮帮忙。
附:为什么这样输出的异常是“!”却不是("余额不足!刷卡失败!")

解决方案 »

  1.   


    把System.out.println("!");改为:
    e.printStackTrace();
    这样就可以了
      

  2.   

    或者改成
    System.out.println(e.getMyString());
      

  3.   


    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("!");
    }
    }
    哎呦、姐姐、你看你这main方法嘛、当你抓到异常之后你是
    System.out.println("!");
    你就打印的"!"嘛,你没有打印异常、而是只打印了一个感叹号
    粗心的孩子