Java 4.定义一个Date类,包含三个成员变量year,month,day,分别定义 (1)以年为参数的构造方法,(2)以年和月为参数的构造方法, (3)以年月日为参数的构造方法。以分别(2016),(2016,10), (2016,10,1)內参数创建三个Date对象
时间: 2024-10-11 07:04:55 浏览: 60
C++类和对象实例解析(二)
在Java中,你可以定义一个`Date`类,并提供所需的构造方法。这里是一个简单的示例:
```java
public class Date {
private int year;
private int month;
private int day;
// 构造方法(1):以年为参数
public Date(int year) {
this.year = year;
this.month = 1;
this.day = 1;
}
// 构造方法(2):以年和月为参数
public Date(int year, int month) {
this.year = year;
this.month = validateMonth(month); // 验证月份范围
this.day = 1;
}
// 构造方法(3):以年月日为参数
public Date(int year, int month, int day) {
this.year = year;
this.month = validateMonth(month);
this.day = validateDay(day, month); // 验证日期范围
}
// 辅助方法,用于验证月份是否有效
private int validateMonth(int month) {
if (month < 1 || month > 12) {
throw new IllegalArgumentException("Invalid month");
}
return month;
}
// 辅助方法,用于验证日期是否有效
private int validateDay(int day, int month) {
int maxDaysInMonth = getDaysInMonth(year, month);
if (day < 1 || day > maxDaysInMonth) {
throw new IllegalArgumentException("Invalid day for the given month and year");
}
return day;
}
// 获取给定年份和月份的最大天数
private int getDaysInMonth(int year, int month) {
// 这里只是一个简化的例子,实际应用中可以使用Calendar或JDK 8的YearMonth类来获取准确值
switch (month) {
case 2:
if (isLeapYear(year)) {
return 29;
} else {
return 28;
}
// ...处理其他月份...
default:
return 30; // 一般月份假设30天
}
}
// 判断是否为闰年
private boolean isLeapYear(int year) {
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
// 省略getter和setter方法...
// 主函数示例,创建并打印Date对象
public static void main(String[] args) {
try {
Date date1 = new Date(2016);
Date date2 = new Date(2016, 10);
Date date3 = new Date(2016, 10, 1);
System.out.println(date1.toString()); // 输出 "Date@<hashcode>"
System.out.println(date2.toString());
System.out.println(date3.toString());
} catch (IllegalArgumentException e) {
System.out.println(e.getMessage());
}
}
}
```
这个例子中,我们定义了`Date`类并提供了三种构造方法。请注意,为了简化,我没有实现`toString()`方法以显示完整日期,而是直接输出类名和哈希码。实际应用中应添加适当的字符串格式化。
阅读全文