私は私のコードにこれを持っています
Thread.currentThread().sleep(x);
Eclipseは静的を使用するように指示します
Thread.sleep(x);
代わりに、なぜですか?違いは何ですか、これら2つの方法の間で機能にまったく違いがありますか?
回答:
メソッドは2つではなく、1つだけであり、静的です。インスタンス参照を介して静的メソッドを呼び出すことはできますが、それは適切なスタイルではありません。これは、プログラマーがインスタンスメソッドを呼び出していると考えていることを示しています。混乱しているプログラマーは、別のスレッド(現在のスレッドではない)をこの方法でスリープさせることができると考えている可能性があります。
コードの両方の行は同じことを行いますが、2番目の行はより良いスタイルです。
Javaでは、スリープは静的メソッドです。どちらの例もまったく同じことをしますが、前のバージョンは特定のオブジェクトのメソッドを呼び出しているように見えますが、まったく実行していないため、混乱を招きます。あなたの例では、それはそれほど重要ではありませんが、次のものがある場合はより危険です。
someOtherThread.sleep(x);
今回は、他のスレッドにスリープを指示しているように見えますが、実際には、現在のスレッドをスリープ状態にしています。この種の間違いを避ける方法は、特定のオブジェクトではなく、クラスを使用して常に静的メソッドを呼び出すことです。
Thread.currentThread().sleep(x);
または、Eclipseが言うようThread.sleep(x);
に、必要に応じて静的コンテキストが必要になるため、このスリープを少し遅らせます。
1つのオブジェクトによって設定された静的パラダイムは、その特定のオブジェクトヒープ印刷ライフサイクルにのみ影響します。オブジェクトライフサイクル全体の静的はそれほど面倒ではなく、必要に応じてコーディングを容易にするために使用できますが、静的フットとして慎重に行う必要があります。 printは、メモリ内のクラスの実行時の単一の印刷コピーであるものではなく、名前のようにClass
(例:-)によって参照されます。Class.forName(pkg.className)
object
HEAP
繰り返しますが、オブジェクトの使用法には、弱い、ファントム、強い種類の参照による長所と短所もあります....、
コードは自然によって複雑になっています。それは、それを機能させて機能させるための私たちのやり方です。