class OutOfMoneyException extends Exception {
private static final long serialVersionUID = 1L; public OutOfMoneyException() {
super("Your account have not enough money!");
} public OutOfMoneyException(String msg) {
super(msg);
} public static void main(String[] args) {
OutOfMoneyException obj = new OutOfMoneyException();
obj.printStackTrace();
}
}
class Account {
private double balance = 1000; public void transfer(double amount) throws OutOfMoneyException {
if (balance < amount)
throw new OutOfMoneyException("Balance< Amount");
balance = balance - amount;
} public double getBalance() {
// TODO Auto-generated method stub
return balance;
}
}public class AccountDemo {
public static void main(String[] args) {
Account obj = new Account();
double amount = 800;
for (int count = 0; count < 3; count++) {
try {
obj.transfer(amount);
System.out.println("balance:" + obj.getBalance());
} catch (OutOfMoneyException exc) {
exc.printStackTrace();
}
amount = amount - 300;
}
}
}它的执行结果跟我想的不一样,大家觉得应该是如何呢?

解决方案 »

  1.   

    请把你怎么想的告诉我们,我们可不肚子里的bug!
      

  2.   


    class OutOfMoneyException extends Exception {
        private static final long serialVersionUID = 1L;    public OutOfMoneyException() {
            super("Your account have not enough money!");
        }    public OutOfMoneyException(String msg) {
            super(msg);
        }    public static void main(String[] args) {
            OutOfMoneyException obj = new OutOfMoneyException();
            obj.printStackTrace();
        }
    }
    class Account {
        private double balance = 1000;    public void transfer(double amount) throws OutOfMoneyException {
         //我估计你想的结果是打印“Your account have not enough money!”
         //如果确实是这样的话,抛出异常的时候用无参的的构造函数
            if (balance < amount)
                throw new OutOfMoneyException();
            balance = balance - amount;
        }    public double getBalance() {
            return balance;
        }
    }
    public class AccountDemo {
        public static void main(String[] args) {
            Account obj = new Account();
            double amount = 800;
            for (int count = 0; count < 3; count++) {
                try {
                    obj.transfer(amount);
                    System.out.println("balance:" + obj.getBalance());
                } catch (OutOfMoneyException exc) {
                 //如果你想只是打印结果的异常信息的话,就用exc.getMessage()
                   System.out.println(exc.getMessage());
                }
                amount = amount - 300;
            }
        }
    }猜了猜楼主的意思!
      

  3.   

    我的错。
    我认为的结果应该是:balance:200.0
    exceptionTest.OutOfMoneyException: Balance< Amount
    balance:0.0可实际输出时:balance:200.0
    balance:0.0
    exceptionTest.OutOfMoneyException: Balance< Amount
      

  4.   

    输出的顺序不一样,debug的时候打印的是按照我预想的那样的,可是运行输出却跟我想的不一样。。求指教。。
      

  5.   

    代码没问题的啊,我这儿的运行结果。
    balance:200.0
    OutOfMoneyException: Balance< Amount
    at Account.transfer(AccountDemo.java:22)
    at AccountDemo.main(AccountDemo.java:37)
    balance:0.0
      

  6.   

    在我机子上执行的结果,第一次是和楼主想的一样,往后就不一样了..猜测是因为虚拟机优化的原因.虚拟机会监测你的代码,并按照某些套路进行优化.所以java才越来越快