我需要创建用户定义的已检查异常。不幸的是,当我尝试抛出它时,我得到错误:未报告的异常InsufficientFunds;必须被抓或宣布被抛出。
我已在方法签名中识别出异常,然后将其抛出到我希望它发生的方法中。但是,我仍然无法理解我所犯的错误。
非常感谢任何输入。
代码示例: main()的
if (e.getSource() == deposit) {
accountType.deposit(money);
} else if (e.getSource() == withdraw) {
if (money % 20 == 0) {
accountType.withdraw(money);
} else {
JOptionPane.showMessageDialog(null, "Entry must be in $20 increments.");
}
}
在此示例中,我在“accountType.deposit(money);”处收到未报告的异常错误。它运行以下方法:
public void withdraw(Double money) throws InsufficientFunds {
if (count >= 4) {
this.money = (money + FEE);
} else {
this.money = money;
}
if (this.balance < this.money) {
throw new InsufficientFunds("You don't have enough money to do that!");
} else {
this.balance -= this.money;
count++;
}
}
这是我的用户定义的异常类
public class InsufficientFunds extends Exception {
public InsufficientFunds(String s) {
super(s);
}
}
任何能够对此有所了解并向我提供一些知识的人都将不胜感激。我确信我忽略了一些事情。
谢谢你, 布赖恩
答案 0 :(得分:4)
您在InsufficientFunds
方法中抛出了一个名为withdraw()
的自定义异常,但您从未在调用方法中捕获该异常。因此,让错误消失的一种方法是将withdraw()
调用放在try-catch
块中:
if (e.getSource() == deposit) {
accountType.deposit(money);
} else if (e.getSource() == withdraw) {
if (money % 20 == 0) {
try {
accountType.withdraw(money);
}
catch (InsufficientFunds ife) {
System.out.println("No funds to withdraw.");
}
catch (Exception e) {
System.out.println("Some other error occurred.");
}
} else {
JOptionPane.showMessageDialog(null, "Entry must be in $20 increments.");
}
}
如果仔细观察,您会看到我首先捕获InsufficientFunds
例外,然后是普通Exception
。这是您通常要遵循的模式,即捕获特定异常后跟更常规的异常,最后捕获Exception
以确保您处理可能出错的每个用例。
替代方法是让调用withdraw()
的方法也抛出异常,即
public static void main(String[] args) throws InsufficientFunds {
if (e.getSource() == deposit) {
accountType.deposit(money);
} else if (e.getSource() == withdraw) {
if (money % 20 == 0) {
accountType.withdraw(money);
} else {
JOptionPane.showMessageDialog(null, "Entry must be in $20 increments.");
}
}
}
答案 1 :(得分:0)
您正在抛出自定义异常,但它永远不会被withdraw()
捕获。 Java使用Catch或Declare Rule,这意味着必须在catch
块中捕获异常,或者在throws
关键字的方法标题中声明异常。
有关其他详细信息,请参阅this reference。