代码块在单线程程序中执行两次

时间:2018-04-10 20:00:08

标签: java

在我的下面的程序中,我发现let x = elements[0].querySelectorAll('.mat-calendar-body-cell'); x.forEach(y => { let c = new Date(y.getAttribute("aria-label")); if(c < this.startDate) { y.classList.add('newClass'); } }); 变量的值是它的预期值的两倍(999000而不是499500)。仔细看看它表明,即使在第一次调用后score设置为true,计算也会完成两次。知道这里出了什么问题吗?该程序是单线程的。实际计算涉及调用rest API,但出于测试目的,我已将其删除。

flag

1 个答案:

答案 0 :(得分:6)

问题是由于类初始化的顺序。静态初始化程序按它们定义的顺序执行。变量flag仅在调用computeScore()后初始化。因此,当第二次调用该方法时,flag将为false。您可能想要摆脱静态块

static{
    computeScore();
}

如果你想要延迟初始化。