我可以在它的类中初始化一个对象吗?

时间:2016-03-14 18:52:22

标签: java

我试图在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取代)但我认为可能有一种更简单的方法。有吗?

1 个答案:

答案 0 :(得分:2)

是的,此行会导致堆栈溢出错误。

Date today = new Date(2016,3,14);

你找到了导致它的原因,这就是原因。当您创建Date时,它具有实例变量today,它会创建另一个Date,从而创建另一个Date,依此类推,直到您的堆栈溢出。< / p>

使static解决问题,因为today只初始化一次,而不是作为每个创建实例的一部分。

你把它作为另一个类的一部分,它可以工作,但你可以在你自己的static类中使它Date,使它更清晰,更易理解,更易读。