Java中Calendar类设置时间日期报错,如何解决?
解决Java类中Calendar初始化报错问题
错误原因
你在类的成员变量定义后直接调用flightDate.set()、flightTime.set()这类方法,违反Java语法规则——类的顶级作用域内仅允许定义成员变量、方法、构造器或初始化块,不能直接执行语句,这就是报错<identifier> expected的根源。
修复方案
有两种常用的合法方式来初始化Calendar对象:
方式1:使用实例初始化块
将初始化语句放在实例初始化块中,每次创建Flight对象时会自动执行这段代码:
import java.util.*; enum CITY{ROME,BUDAPEST,PARIS,GREECE,TALIN,AMSTREDAM,VIENNA;} class Flight{ private String flightName = "AirBus"; private int ticketPrice = 50; private CITY Destination = CITY.ROME; private int numberOfTravellers = 83; private int flightDuration = 2; Calendar flightTime = Calendar.getInstance(); Calendar flightDate = Calendar.getInstance(); // 实例初始化块 { flightDate.set(Calendar.YEAR, 2002); flightDate.set(Calendar.MONTH, 2); flightDate.set(Calendar.DAY_OF_MONTH, 20); // 推荐用DAY_OF_MONTH替代过时的DAY字段 flightTime.set(Calendar.HOUR,10); flightTime.set(Calendar.MINUTE, 0); flightTime.set(Calendar.SECOND, 0); } private static int goalTicketPrice = 35; }
方式2:在构造器中初始化
创建Flight类的构造方法,将Calendar的初始化逻辑放在构造器内:
import java.util.*; enum CITY{ROME,BUDAPEST,PARIS,GREECE,TALIN,AMSTREDAM,VIENNA;} class Flight{ private String flightName = "AirBus"; private int ticketPrice = 50; private CITY Destination = CITY.ROME; private int numberOfTravellers = 83; private int flightDuration = 2; Calendar flightTime = Calendar.getInstance(); Calendar flightDate = Calendar.getInstance(); private static int goalTicketPrice = 35; // 构造器 public Flight() { flightDate.set(Calendar.YEAR, 2002); flightDate.set(Calendar.MONTH, 2); flightDate.set(Calendar.DAY_OF_MONTH, 20); flightTime.set(Calendar.HOUR,10); flightTime.set(Calendar.MINUTE, 0); flightTime.set(Calendar.SECOND, 0); } }
额外提示
Calendar类的DAY字段已过时,建议使用DAY_OF_MONTH来设置日期,避免后续版本的兼容性问题。
内容的提问来源于stack exchange,提问作者inspironman
相关产品推荐
相关产品推荐

