我的代码中有这段内容
Thread.currentThread().sleep(x);
Eclipse提示我使用静态方法
Thread.sleep(x);
那么,为什么要使用 instead
?这两种方法之间有何区别?它们的功能是否存在任何差异?
我的代码中有这段内容
Thread.currentThread().sleep(x);
Eclipse提示我使用静态方法
Thread.sleep(x);
那么,为什么要使用 instead
?这两种方法之间有何区别?它们的功能是否存在任何差异?
只有一个方法而不是两个,它是静态的。虽然您可以通过实例引用调用静态方法,但这不是好的编程风格。这表明程序员认为自己正在调用一个实例方法。混淆的程序员可能会认为以这种方式可以使另一个线程(而非当前线程)休眠,但事实并非如此。
您的两行代码做相同的事情,但第二种方式更好。
someOtherThread.sleep(x);
这次看起来像是在让另一个线程睡眠,但实际上是让当前线程睡眠。避免此类错误的方法是始终使用类而不是特定对象调用静态方法。
Thread.currentThread().sleep(x);
或者 Eclipse 所说的方式 Thread.sleep(x);
需要静态上下文,因此使用这个睡眠函数会有轻微延迟。
静态范式由一个对象设置,只影响该特定对象的堆打印生命周期,考虑整个对象生命周期时,静态不会那么麻烦,如果需要,可以用它来简化编码,但是要小心,因为静态占用的空间被类(例如:-Class.forName(pkg.className)
)所引用,就像按名称而不是按任何单次运行时副本的object
在堆内存中的类。
再次,对象的使用也有弱、幻象、强引用的利弊。
代码具有复杂性。这只是我们为了让它能够工作和实用而做的事情。