为什么我的自定义异常不起作用? Java的

时间:2014-02-26 04:36:12

标签: java exception

我试图完成所有日食快速修复,但由于某种原因它仍然存在 当我尝试使用我的测试文件夹

编译它时,会给我一条错误消息

它一直告诉我“Syntax error on token "InsufficientFundsException", VariableDeclaratorId expected after this

并且我不知道这意味着什么,所有我需要做的例外是测试我的余额是否为负,如果是负的则吐出多少我的空白。

public class BankAccount
{
    // Variables that are private so there is no recounts
    private static int nextID = 100;
    private static int newID() { return nextID++; }
    // Instance variables
    private double balance;
    private int id;
    // Constructors
    public BankAccount()
    {
        this(0);
    }
    public BankAccount(int initBal)
    {
        balance = initBal;
        id      = newID();
    }
    // Instance (non-static) methods
    public double    getBalance()
    {
        return balance;
    }
    public int    getAccountNumber()
    {
        return id;
    }
    public double getAmount()
    {
        return testAmount;
    }
    public void   deposit (double depositAmount)
    {
        balance += depositAmount;
    }
    public void   withdraw(double amount) throws InsufficientFundsException
    {
        balance -= amount;
        double difference;
        if (balance < balance-amount)
        difference = amount - balance;
        throw new InsufficientFundsException();
        try
        {
            double nbalance = (balance - amount);
        }
        catch (InsufficientFundsException)
        {
            System.out.println("You do not have enough for this transaction , you are short by " + difference);
        }
    }
}
public class InsufficientFundsException extends Exception
{
    public InsufficientFundsException() throws InsufficientFundsException
    {
        throw new InsufficientFundsException();
    }
    public double getAmount()
    {
        return getAmount();
    }
}

4 个答案:

答案 0 :(得分:1)

之后的代码

throw new InsufficientFundsException();

是死代码。

其他代码也是错误的

E.g。

InsufficientFundsException构造函数抛出自己。

catch (InsufficientFundsException)错了。它需要一个变量。

double nbalance = (balance - amount);永远不会抛出InsufficientFundsException例外。

getAmount()只是递归调用自身而没有逻辑。

答案 1 :(得分:0)

你需要

catch (InsufficientFundsException e)
    {

注意e。您需要一个变量来“存储”异常。

之后还有一些问题需要解决。抛出异常时,它会实例化并反复抛出它。

答案 2 :(得分:0)

复制回答评论(Sotirios Delimanolis)。在catch()

中提供变量名
 catch (InsufficientFundsException someE)
        {
            System.out.println("You do not have enough for this transaction , you are short by " + difference);
        }

答案 3 :(得分:0)

我没有直接回答所问的问题(Jayan,DeadChex和Sotirios Delimanolis已经做过),我会指出你有大量无意义的代码。例如,InsufficientFundsException类的两个成员都不做任何事情,只能无条件地自称。如果编译器甚至接受了它,那么一旦你尝试调用它就会导致程序崩溃。此外,异常构造函数看起来与任何其他构造函数完全相同。异常类应如下所示:

public class InsufficientFundsException extends Exception {
    double amount;

    public InsufficientFundsException(double amount) {
        super();
        this.amount = amount;
    }

    public double getAmount() {
        return amount;
    }
}

先前的答案似乎错过了一件事:catch语句只能捕获从相应的try块中抛出的异常,并且您不需要使用{{1如果捕获到异常,则返回子句。您还有一些逻辑错误,这意味着throws方法无论如何都不会按照您的意思执行。要使它工作,它需要看起来像这样:

withdraw

当然,你根本不应该使用例外。这是做同样事情的更好方法:

public void withdraw(double amount) {
    try {
        if(amount > balance) throw new InsufficientFundsException(amount - balance);
        balance -= amount;
    } catch(InsufficientFundsException e) {
        System.out.println("You do not have enough for this transaction, you are short by $" + e.getAmount());
    }
}