【发布时间】:2017-03-13 22:28:48
【问题描述】:
我知道有很多不同的方法可以创建 class 的 instance,我不太了解,但我刚刚看到了这种定义。
我什至不确定它是否正在制作一个新的instance!!
有点误会,我不能很好地消化它。
谁能解释一下下面的代码?
new timer().scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
...
}
}, 0, 1000);
上面的和下面的有区别吗?只要一样,你更喜欢哪一个?
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
...
}
}, 0, 1000);
【问题讨论】:
-
我不希望第一个编译,除非
timer()是一个构造函数,在这种情况下两者是相同的。 -
如果我要多次使用一个变量,我用
Timer t = new Timer()创建变量,否则new Timer()就足够了 -
唯一的区别(除了编译错误)是,在第一个示例中,您没有
timer变量来引用代码后面的Timer对象;例如如果您稍后出于某种原因需要致电timer.cancel()。假设你不这样做,第一种形式(IMO)更好。 -
它们是不同的,但实际上两者都是错误的。我不会依赖
Timer在它被垃圾收集后继续运行,你肯定需要一些方法来停止它一段时间,所以你需要保留对它的引用,而不仅仅是在本地变量。