我的代码中有这个
Thread.currentThread().sleep(x);
Eclipse告诉我使用静态
Thread.sleep(x);
相反,为什么呢?有什么区别,这两种方法之间的功能是否完全不同?
Answers:
只有一种方法,而不是两种,它是静态的。虽然您可以通过实例引用调用静态方法,但这不是很好的样式。它表明程序员认为他或她正在调用实例方法。一个困惑的程序员可能会认为他或她可以使另一个线程(不是当前线程)以这种方式进入睡眠状态,而这并不是这样做的。
您的两行代码都做同样的事情,但第二行是更好的样式。
在Java中,睡眠是一种静态方法。您的两个示例都做完全相同的事情,但是前一个版本令人困惑,因为它看起来像是在特定对象上调用方法,但根本没有这样做。在您的示例中,这无关紧要,但是如果您具有以下条件,则将更加危险:
someOtherThread.sleep(x);
这次看起来您正在告诉其他线程进入睡眠状态,但实际上您正在使当前线程进入睡眠状态。避免发生此类错误的方法是始终使用类而不是特定对象来调用静态方法。
这两个方法调用在行为上是相同的,因为它们调用相同的方法,但是使用类名(在本例中为Thread)而不是实例来访问静态字段,并且方法使这种静态性清晰可见。这就是产生此警告的原因。
但是考虑到大多数IDE中以特定方式显示了静态字段和方法(例如Eclipse和IntelliJ IDEA中以斜体显示),是否仍然需要此警告?也许不像Java早期那样需要使用简单的编辑器。
Thread.currentThread().sleep(x);
还是Eclipse所说的Thread.sleep(x);
需要静态上下文的方式,因此我们在睡眠中会稍有延迟。
由一个对象设置的静态范式仅影响特定的对象堆打印生命周期,再次考虑到整个“对象生命周期”并不那么麻烦,如果需要,可以将其用于简化编码,但请谨慎地做为静态脚位。 print由Class
(例如Class.forName(pkg.className)
:-)像按名称一样引用,而不是由内存object
中Class的运行时单个打印副本引用HEAP
。
再次,对象的使用在Weak,Phantom,Strong类引用中也有优缺点....,
代码是自然界的难题。这就是我们如何使其正常工作和起作用的方法。