Java 如何在构造函数中设置过期日期?
我正在尝试创建一个TravelCard类,该类还应该检查该卡是否仍然有效(未过期)。但我有这个错误 未报告的异常ParseException;必须被抓住或宣布被抛出 在这一行Java 如何在构造函数中设置过期日期?,java,Java,我正在尝试创建一个TravelCard类,该类还应该检查该卡是否仍然有效(未过期)。但我有这个错误 未报告的异常ParseException;必须被抓住或宣布被抛出 在这一行 this.expirationDate = sdf.parse(expiry); 如何在构造函数中设置过期日期 有人可能会注意到,我以前从未使用过日期。而且我对Java还相当陌生 package something; import java.text.SimpleDateFormat; import java.util
this.expirationDate = sdf.parse(expiry);
如何在构造函数中设置过期日期
有人可能会注意到,我以前从未使用过日期。而且我对Java还相当陌生
package something;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class TravelCard {
private double balance;
private SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
private Date expirationDate;
private Date today = Calendar.getInstance().getTime();
public TravelCard(double balance, String expiry){
sdf.setLenient(false);
this.balance = balance;
this.expirationDate = sdf.parse(expiry);
}
public void pay(double price){
if (today.before(expirationDate)){
if(this.balance >= price){
this.balance -= price;
}
else {
System.out.println("Insufficient funds");
}
}
else {
System.out.println("Card expired");
}
}
public double getBalance(){
return balance;
}
}
这意味着,parse()
方法抛出一个选中的异常,或者是catch
异常,或者是throw
捕获异常的方法:
public void TravelCard(double balance, String expiry){
sdf.setLenient(false);
this.balance = balance;
try {
this.expirationDate = sdf.parse(expiry);
} catch (ParseException e) {
e.printStackTrace();
}
}
public void TravelCard(double balance, String expiry) throws ParseException{
引发异常的方法:
public void TravelCard(double balance, String expiry){
sdf.setLenient(false);
this.balance = balance;
try {
this.expirationDate = sdf.parse(expiry);
} catch (ParseException e) {
e.printStackTrace();
}
}
public void TravelCard(double balance, String expiry) throws ParseException{
编译器试图告诉您,
sdf.parse(expiry)
可能会失败。因为此方法(parse
)显式地创建类型为ParseException
的异常必须将其放置在块中或将声明添加到构造函数中。最好让构造函数接受日期参数(expirationDate)而不是字符串参数(Expiration)。并在调用TravelCard构造函数之前解析字符串。如果无法解析过期字符串,则无法创建具有有效过期日期的TravelCard对象
public class TravelCard {
private double balance;
private final Date expirationDate;
private final Date today = Calendar.getInstance().getTime();
public TravelCard(final double balance, final Date expirationDate) {
this.balance = balance;
this.expirationDate = expirationDate;
}
// parsing the expiry String and then calling the constructor
public static TravelCard createTravelCard(final double balance, final String expiry) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
sdf.setLenient(false);
Date expirationDate = sdf.parse(expiry)
return new TravelCard(balance, expiry);
}
// examples
TravelCard.createTravelCard(20.0, "26/11/2016"); // TravelCard created
TravelCard.createTravelCard(20.0, "36/11/2016"); // throws ParseException
ParseException
是选中的异常。请阅读这篇文章,然后决定你是想抓住它还是扔掉它。好的,谢谢,我让它工作了。您认为哪种方式更明智:尝试catch或添加throws声明?通常这取决于。。。如果要将错误转移到上游并采取纠正措施,请使用throws。如果确实可以纠正错误,请使用try/catch。在本例中,我将抛出它,并在实例化此类型时使用try-catch块。