[英]How do I throw an exception in java?
嗯..这是给我的指示:
支持与其他Money对象进行加减运算
如果货币不兼容,则引发异常。
嗯..我已经有了一个带有add()的货币类。 在这种情况下,我该如何抛出异常? 我的意思是,我知道该怎么做{},但是我应该在哪里做呢? 我可以在同一个金钱阶层上这样做吗? 还是应该在发生其他所有事情的main()之类的地方抛出异常?
public class Money {
Currency currency;
int dollar;
int cents;
//constructor
public Money(Currency currency, int dollar, int cents) {
super();
this.currency = currency;
this.dollar = dollar;
this.cents = cents;
}
.
.
.
.
public Money add(Money moneyToBeAdded){
Money result = new Money(moneyToBeAdded.getCurrency(),0,0);
Money totalInCents;
if(compareCurrency(moneyToBeAdded)){
totalInCents = new Money(moneyToBeAdded.getCurrency(),0,(moneyToBeAdded.toCents() + cents));
result = totalInCents.toDollars();
}//to do convert currency
return result;
}
public Money subtract()
public boolean compareCurrency(Money money){
return money.currency.equals(currency);
}
}
throw new Exception("Currencies are incompatible");
但是,我会考虑创建一个特定于应用程序或Money
异常,根据您的需要将Exception
或RuntimeException
子类RuntimeException
。
如果事情必须MoneyException
话,可能是MoneyConversionException
扩展了MoneyException
。
我认为这是使用未经检查的异常的好地方; 尝试添加不兼容的货币是由于编程错误。 所以我建议:
if (!compareCurrency(moneyToBeAdded))
throw new IllegalArgumentException("Mismatched currencies.");
由于IllegalArgumentException
派生自RuntimeException
,因此您无需声明add()
方法可以抛出它。
不要创建一个自定义子类RuntimeException
。 当应用程序试图从特定错误中恢复时,自定义异常类型非常有用,而不仅仅是使用相同的日志记录或警报机制来处理每个异常。 程序不应尝试从诸如此类的特定编程错误中恢复。
正如其他人提到的那样,您有很多资源可供使用(例如this )。 无论如何,除此之外,我会警惕抛出自定义异常。 而是抛出一个现有的(例如IllegalArgumentException
)以最小化复杂性。
应该抛出任何Exception
需要throw子句:
public Money add(Money moneyToBeAdded) throws MoneyException{..}
在该方法中,您需要过滤掉要引发异常的情况(例如,如果有if子句),然后执行以下操作:
throw new MoneyException("don't like that currency");
在此示例中,MoneyException是扩展Exception的类:
class MoneyException extends Exception {..}
请参考Oracle网站上的课程
http://docs.oracle.com/javase/tutorial/essential/exceptions/
引发异常与报告错误有关,必须将其声明为方法声明的一部分。 例如:
class SomeMoneyProblem extends Exception {
public SomeMoneyProblem() {
super();
}
public SomeMoneyProblem(String msg) {
super(msg);
}
}
public class Money {
...
public Money() {
}
public Money someMoneyMethod(Money moreMoney) throws SomeMoneyProblem {
....
if ( someProblemCondition )
throw new SomeMoneyProblem();
if ( someOtherProblem )
throw new SomeMoneyProblem("Other Problem");
}
public static void main() {
Money m = new Money();
try {
m.someMoneyMethod();
} catch (SomeMoneyProblem p) {
System.err.println(p);
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.