Ich habe das in meinem Code
Thread.currentThread().sleep(x);
Eclipse fordert mich auf, die Statik zu verwenden
Thread.sleep(x);
stattdessen warum? Was ist der Unterschied, gibt es überhaupt einen Unterschied in der Funktionalität zwischen diesen beiden Methoden?
Antworten:
Es gibt nur eine Methode, nicht zwei, und sie ist statisch. Sie können eine statische Methode zwar über eine Instanzreferenz aufrufen, sie ist jedoch kein guter Stil. Es zeigt an, dass der Programmierer glaubt, eine Instanzmethode aufzurufen. Ein verwirrter Programmierer könnte denken, dass er oder sie einen anderen Thread (nicht den aktuellen) dazu bringen kann, auf diese Weise zu schlafen, wenn dies nicht der Fall ist.
Beide Codezeilen machen dasselbe, aber die zweite ist ein besserer Stil.
quelle
In Java ist Sleep eine statische Methode. Ihre beiden Beispiele machen genau dasselbe, aber die frühere Version ist verwirrend, weil es so aussieht, als würde sie eine Methode für ein bestimmtes Objekt aufrufen, aber das tut sie überhaupt nicht. In Ihrem Beispiel spielt es keine Rolle, aber es ist gefährlicher, wenn Sie Folgendes haben:
Dieses Mal sieht es so aus, als würden Sie einem anderen Thread sagen, er solle schlafen, aber tatsächlich setzen Sie den aktuellen Thread in den Ruhezustand. Um diese Art von Fehlern zu vermeiden, müssen Sie statische Methoden immer mit der Klasse und nicht mit einem bestimmten Objekt aufrufen.
quelle
Die beiden Methodenaufrufe sind im Verhalten identisch, da sie dieselbe Methode aufrufen, aber die Verwendung des Klassennamens ( in diesem Fall Thread ) anstelle einer Instanz für den Zugriff auf statische Felder und Methoden diese Statizität deutlich macht. Deshalb wird diese Warnung ausgegeben.
Ist diese Warnung jedoch weiterhin erforderlich, wenn man bedenkt, dass statische Felder und Methoden in den meisten IDEs auf bestimmte Weise angezeigt werden (z. B. in kursiver Schrift in Eclipse und IntelliJ IDEA)? Vielleicht nicht so notwendig wie in den frühen Tagen von Java, als einfache Editoren verwendet wurden.
quelle
Thread.currentThread().sleep(x);
oder die Art und Weise, wie Eclipse sagt, dassThread.sleep(x);
statischer Kontext erforderlich ist, wenn dies erforderlich ist, sodass wir uns mit diesem Schlaf für eine leichte Verzögerung festhalten.Das statische Paradigma, das von einem Objekt festgelegt wird, wirkt sich nur auf diesen bestimmten Lebenszyklus des Objekt-Heap-Drucks aus. Auch hier ist der statische Gesamtlebenszyklus des Objekts nicht so störend. Bei Bedarf kann er zur Vereinfachung der Codierung verwendet werden, muss jedoch sorgfältig als statischer Fuß ausgeführt werden. print wird von
Class
(zum Beispiel: -Class.forName(pkg.className)
) als gleichnamig bezeichnet und nicht von einerobject
einzelnen Laufzeitkopie der Klasse imHEAP
Speicher.Wieder hat die Verwendung von Objekten auch Vor- und Nachteile von Weak, Phantom, Strong Art von Referenzen ....,
Code ist von Natur aus verschlungen. Es ist genau so, wie wir es tun, damit es funktioniert und funktioniert.
quelle