我是初学者,我有一个编写Date类的任务(作为更大项目的一部分)。 在我的问题中,我专注于构造函数。这里有一些背景知识: 给定的指导原则是预期日期无效,以下实例变量需要此输入范围: 日 - 整数1-31 月 - 整数1-12 年 - 整数4位数年。
现在,如果输入无效的日/月/年或无效日期(例如31.2.2010),将创建日期为1.1.2000的对象。
这是我提出的代码,它确实编译并且似乎工作正常。
public class Date
{
private int _day;
private int _month;
private int _year;
public Date (int day, int month, int year)
{
switch (month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: if ((day>0 && day<32) && (year>999 && year<10000))
{
_day=day;
_month=month;
_year=year;
}
else
{
_day=1;
_month=1;
_year=2000;
}
break;
case 4:
case 6:
case 9:
case 11: if ((day>0 && day<31) && (year>999 && year<10000))
{
_day=day;
_month=month;
_year=year;
}
else
{
_day=1;
_month=1;
_year=2000;
}
break;
case 2: if (leap(year))
{
if ((day>0 && day<30) && (year>999 && year<10000))
{
_day=day;
_month=month;
_year=year;
}
else
{
_day=1;
_month=1;
_year=2000;
}
break;
}
else
{
if ((day>0 && day<29) && (year>999 && year<10000))
{
_day=day;
_month=month;
_year=year;
}
else
{
_day=1;
_month=1;
_year=2000;
}
break;
}
}
}
/** check if leap year */
private boolean leap (int y)
{
return (y % 4 == 0 && y % 100 != 0) || (y % 400 == 0);
}
}
这是我的问题:
答案 0 :(得分:0)
将所有代码放在构造函数中是否可以?它会大大影响处理时间或导致错误吗?如果有问题会有替代方案吗?
嗯,构造函数体中的代码没有任何问题。只要您的语法正确,您的代码将始终正常运行。但是,您需要知道的一件重要事情是:当构造函数体中的代码的复杂性达到一定水平时,它开始告诉您的处理时间。一个很好的例子是在构造函数中有多个循环和/或繁重的后台进程的情况。 这就是为什么在构造函数体中放置繁重的进程是不赞成的(但不是禁止的)。
代码的任何部分都被视为不良做法?
您可以通过多种方式优化代码:
您可以为全局变量和实例变量指定相同名称,并使用this
关键字区分它们。即:this.day = day;
利用Java中已有的类和包。 Calendar类具有返回一个月中的天数的方法,依此类推。而不是重新发明轮子,使用它们。检查this question,了解如何获取一个月内的天数。还有许多其他方法也可能对您有用。
最后,您可以声明一个单独的方法将值设置为您选择的默认状态(01-01-2000),这样您就不必每次都设置它,这会大大减少您的行代码。
我希望这有帮助..快乐编码!