我试图在Java中创建一个“Date”类,所以我写了这个:
class Date
{
private int year, month, day;
Date(int year, int month, int day)
{ this.year = year; this.month = month; this.day = day; }
Date today = new Date(2016,3,14);
public int addDaysTo(Date someDate) { // <<------- this supposed to calculate number of days required to achieve passed date from today
int def = convToDays(someDate) - convToDays(today);
if (def < 0) return -1;
return def;
}
}
这给了我一个错误:堆栈溢出。我认为这是因为行
Date today = new Date(2016,3,14);
我理解在其自己的类中初始化一个对象会导致无限循环,但如果我需要像addDaysTo方法那样识别一些Date常量,我应该怎么做?!
我尝试将有问题的行移动到新类并使其静态如下:
class stupidSol
{
static Date today = new Date(2016,3,14);
}
这有效(当然今天被stupidSol.today取代)但我认为可能有一种更简单的方法。有吗?
答案 0 :(得分:2)
是的,此行会导致堆栈溢出错误。
Date today = new Date(2016,3,14);
你找到了导致它的原因,这就是原因。当您创建Date
时,它具有实例变量today
,它会创建另一个Date
,从而创建另一个Date
,依此类推,直到您的堆栈溢出。< / p>
使static
解决问题,因为today
只初始化一次,而不是作为每个创建实例的一部分。
你把它作为另一个类的一部分,它可以工作,但你可以在你自己的static
类中使它Date
,使它更清晰,更易理解,更易读。