У меня это в моем коде
Thread.currentThread().sleep(x);
Eclipse говорит мне использовать статический
Thread.sleep(x);
вместо этого, почему? В чем разница, есть ли какая-то разница в функциональности между этими двумя методами?
У меня это в моем коде
Thread.currentThread().sleep(x);
Eclipse говорит мне использовать статический
Thread.sleep(x);
вместо этого, почему? В чем разница, есть ли какая-то разница в функциональности между этими двумя методами?
Ответы:
Есть только один метод, а не два, и он статический. Хотя вы можете вызвать статический метод через ссылку на экземпляр, это плохой стиль. Это указывает на то, что программист думает, что он или она вызывает метод экземпляра. Запутанный программист может подумать, что он или она может заставить другой поток (не текущий) спать таким образом, хотя это не то, что он делает.
Обе строки кода делают одно и то же, но вторая лучше по стилю.
В 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
что является единственной печатной копией класса во время выполнения в HEAP
памяти.
Опять же, использование объекта также имеет плюсы и минусы для слабых, фантомных, сильных ссылок ....,
Код запутан самой природой. Это просто то, как мы делаем, чтобы он работал и работал.