Java 为什么可以';我的测试课不运行吗?
所以我试着做一个测试课,说明是 创建一个名为TestDate的类,其构造函数通过调用每个日期的getDayOfWeek()方法创建15个日期对象并显示日期的星期几。具体日期如下所示,顺序如下: 但是当我运行它的时候,我总是会出错!我想是我的构造器崩溃了或者是在这条线上的某个地方 下面是我的TestDate类代码Java 为什么可以';我的测试课不运行吗?,java,Java,所以我试着做一个测试课,说明是 创建一个名为TestDate的类,其构造函数通过调用每个日期的getDayOfWeek()方法创建15个日期对象并显示日期的星期几。具体日期如下所示,顺序如下: 但是当我运行它的时候,我总是会出错!我想是我的构造器崩溃了或者是在这条线上的某个地方 下面是我的TestDate类代码 public class TestDate { private Date date; /* * Main Constructor * @param fifteen specific
public class TestDate
{
private Date date;
/*
* Main Constructor
* @param fifteen specific date, test to your heart's content
*/
public TestDate()
{
Date d1 = new Date(1970, 11, 15);
System.out.println(date.getDayOfTheWeek());
Date d2 = new Date(1887, 7, 31);
Date d3 = new Date(1966, 5, 2);
Date d4 = new Date(1980, 8, 19);
Date d5 = new Date(2001, 9, 11);
Date d6 = new Date(1900, 6, 26);
Date d7 = new Date(1940, 2, 28);
Date d8 = new Date(1974, 10, 30);
Date d9 = new Date(1914, 1, 15);
Date d10 = new Date(1840, 10, 1);
Date d11 = new Date(1999, 12, 31);
Date d12 = new Date(1988, 5, 20);
Date d13= new Date(2012, 3, 10);
Date d14 = new Date(2006, 4, 1);
Date d15 = new Date(1992, 2, 29);
}
}
这是我的Date类构造函数和方法GetDayOfWeek,我想这就是所有与我的问题相关的信息
public class Date
{
public Date(int year, int month, int day)
{
setYear(year);
setMonth(month);
setDay(day);
}
public String getDayOfTheWeek()
{
int step0 = year%100;
int step1 = step0 / 12;
int step2 = step0 % 12;
int step3 = step2 / 4;
int step4 = day;
int step5 = 0;
if(month == JANUARY || month == OCTOBER)
{
step5 = JAN_CODE;
}
else if(month == FEBURARY || month == MARCH || month == NOVEMBER)
{
step5 = FEB_CODE;
}
else if(month == APRIL || month == JULY)
{
step5 = APR_CODE;
}
else if(month == MAY)
{
step5 = MAY_CODE;
}
else if(month == JUNE)
{
step5 = JUN_CODE;
}
else if(month == AUGUST)
{
step5 = AUG_CODE;
}
else if(month == SEPTEMBER || month == DECEMBER)
{
step5 = SEP_CODE;
}
else
{
step5 = 0;
}
if(year/100 ==16 || year/100 == 20)
{
step5 = step5 + SPECIAL_CODE_SIX;
}
else if(year/100 == 17 || year/100 == 21)
{
step5 = step5 + SPECIAL_CODE_FOUR;
}
else if(year/100 == 18)
{
step5 = step5 + SPECIAL_CODE_TWO;
}
int step6 = (step1 + step2 + step3 +step4 + step5)%MOD_CODE;
if(step6 == SAT_CODE)
{
return "Saturday";
}
else if(step6 == SUN_CODE)
{
return "Sunday";
}
else if(step6 == MON_CODE)
{
return "Monday";
}
else if(step6 == TUE_CODE)
{
return "Tuesday";
}
else if(step6 == WED_CODE)
{
return "Wednesday";
}
else if(step6 == THU_CODE)
{
return "Thursday";
}
else if(step6 == FRI_CODE)
{
return "Friday";
}
else
{
return null;
}
}
}
我在mutator方法中传递了参数
public void setYear(int year)
{
if(year <= CURRENT_YEAR && year >= YEAR_ZERO)
{
this.year = year;
}
}
public void setMonth(int month)
{
if(month <= DECEMBER && month >= JANUARY)
{
this.month = month;
}
}
public void setDay(int day)
{
if(month == JANUARY || month == MARCH || month == MAY || month == JULY || month == AUGUST
|| month == OCTOBER || month == DECEMBER)
{
if(day <= DAY_THIRTY_ONE && day >= DAY_ONE)
{
this.day = day;
}
else
{
year = CURRENT_YEAR;
month = JANUARY;
day = DAY_ONE;
}
}
else if(month == APRIL || month == JUNE || month == SEPTEMBER || month == NOVEMBER)
{
if(day <= DAY_THIRTY && day >= DAY_ONE)
{
this.day = day;
}
else
{
year = CURRENT_YEAR;
month = JANUARY;
day = DAY_ONE;
}
}
else if(month == FEBURARY)
{
if((isLeapYear() == true) && day <= DAY_FEB_LEAP && day >= DAY_ONE)
{
this.day = day;
}
else if((isLeapYear() == false) && day <= DAY_FEB_NORMAL && day >= DAY_ONE)
{
this.day = day;
}
else
{
year = CURRENT_YEAR;
month = JANUARY;
day = DAY_ONE;
}
}
}
Sorry for the long list of code, I don't really know which ones are useless.
public void setYear(整数年)
{
如果(年份=零年)
{
今年=年;
}
}
公共无效设置月(整数月)
{
如果(月=一月)
{
本月=月;
}
}
公共无效设定日(整数日)
{
如果(月==一月| |月==三月| |月==五月| |月==七月| |月==八月
||月份==10月|月份==12月)
{
如果(天=第一天)
{
this.day=天;
}
其他的
{
年份=本年度;
月份=一月;
天=第一天;
}
}
如果(月==四月| |月==六月| |月==九月| |月==十一月)
{
如果(天=第一天)
{
this.day=天;
}
其他的
{
年份=本年度;
月份=一月;
天=第一天;
}
}
如果发生其他情况(月==二月)
{
如果((isLeapYear()==true)&&day=第一天)
{
this.day=天;
}
else if((isLeapYear()==false)和&day=第一天)
{
this.day=天;
}
其他的
{
年份=本年度;
月份=一月;
天=第一天;
}
}
}
很抱歉列出了这么长的代码,我真的不知道哪些是无用的。
在您调用的构造函数的第二行
System.out.println(date.getDayOfWeek())代码>
变量date
,此时为空,因为它尚未初始化。这会导致出现NullPointerException
。请阅读此处了解更多信息:
我(假设)你想在那里做的是:
System.out.println(d1.getDayOfWeek())代码>
除此之外,我还注意到:
在javadoc注释中使用@param
字段,而不使用参数。不要这样做。如果构造函数不接受参数,则不应存在@param
您正在构造函数中创建15个Date实例,其作用域在构造函数完成后立即结束。你可以删除它们,什么都不会改变。我假设您希望这个类成为一个“测试”,以测试您的日期是否正确初始化。我建议使用main
方法(用于编码时的快速测试)和像JUnit
这样的实际测试框架进行“真实”测试。若你们感兴趣,你们可以阅读本教程。它还详细说明了您实际想要测试的原因
如果出现错误,请共享stacktraceWell,是您的构造函数崩溃了吗?您的堆栈跟踪将告诉您问题的确切位置:类、方法和行号,以及异常的实际类型。我将继续学习什么是堆栈跟踪,谢谢!这正是我想要的,我将阅读链接了解更多信息。@james没问题。我更新了我的答案,加入了一些你目前没有使用的“最佳实践”。也许你也可以看看。