хранятся - статический класс java




Java: когда использовать статические методы (14)

Мне интересно, когда использовать статические методы?

  1. Общим для static методов является доступ к static полям.
  2. Но вы можете иметь static методы, не ссылаясь на static переменные. Вспомогательные методы без ссылки на static переменную можно найти в некоторых классах Java, таких как java.lang.Math

    public static int min(int a, int b) {
        return (a <= b) ? a : b;
    }
    
  3. Другой вариант использования, я могу думать об этих методах в сочетании с synchronized методом - это реализация блокировки уровня класса в многопоточной среде.

Скажем, если у меня есть класс с несколькими геттерами и сеттерами, метод или два, и я хочу, чтобы эти методы были только invokable для объекта экземпляра класса. Означает ли это, что я должен использовать статический метод?

Если вам нужен метод доступа к экземпляру объекта класса, ваш метод должен быть не статическим.

page документации Oracle содержит более подробную информацию.

Не все комбинации переменных и методов экземпляра и класса допускаются:

  1. Методы экземпляров могут напрямую обращаться к переменным экземпляра и методам экземпляров.
  2. Методы экземпляров могут напрямую обращаться к переменным класса и методам класса.
  3. Методы класса могут напрямую обращаться к переменным класса и методам класса.
  4. Методы класса не могут напрямую обращаться к переменным экземпляра или методам экземпляра - они должны использовать ссылку на объект. Кроме того, методы класса не могут использовать это ключевое слово, так как для этого нет экземпляра.

Мне интересно, когда использовать статические методы? Скажем, если у меня есть класс с несколькими геттерами и сеттерами, метод или два, и я хочу, чтобы эти методы были только invokable для объекта экземпляра класса. Означает ли это, что я должен использовать статический метод?

например

Obj x = new Obj();
x.someMethod

или же

Obj.someMethod

(это статический путь?)

Я довольно смущен!


В eclipse вы можете включить предупреждение, которое поможет вам обнаружить потенциальные статические методы. (Над выделенной линией еще одна, которую я забыл выделить)


Используйте статический метод, когда вы хотите иметь доступ к методу без экземпляра класса.


Нет, статические методы не связаны с экземпляром; они принадлежат классу. Статические методы - ваш второй пример; методы экземпляра являются первыми.


Определите статические методы только в следующих сценариях:

  1. Если вы пишете служебные классы, и они не должны быть изменены.
  2. Если метод не использует какую-либо переменную экземпляра.
  3. Если какая-либо операция не зависит от создания экземпляра.
  4. Если есть некоторый код, который может быть легко разделен всеми методами экземпляра, извлеките этот код в статический метод.
  5. Если вы уверены, что определение метода никогда не будет изменено или переопределено. Поскольку статические методы нельзя переопределить.

Прочитав статьи Misko, я считаю, что статические методы плохо с точки зрения тестирования. Вместо этого у вас должны быть factories (возможно, с использованием инструмента для инъекций зависимостей, такого как Guice ).

как я могу гарантировать, что у меня есть только одна

есть только одна проблема. Проблема «как я могу убедиться, что у меня есть только что-то», это приятно обойти стороной. Вы создаете экземпляр только одного ApplicationFactory в своей основной форме, и в результате вы создаете экземпляр только одного экземпляра всех ваших синглетов.

Основная проблема со статическими методами - это процедурный код

Основная проблема со статическими методами - это процедурный код. Я понятия не имею, как модульный код с модульным тестированием. Unit-testing предполагает, что я могу создать экземпляр части приложения отдельно. Во время создания я связываю зависимости с mocks / friendlies, которые заменяют реальные зависимости. При процедурной программировании нет ничего, чтобы «пронести», поскольку нет объектов, код и данные являются отдельными.


Статические методы в java относятся к классу (а не к экземпляру). Они не используют переменные экземпляра и обычно принимают входные данные из параметров, выполняют действия над ним, а затем возвращают некоторый результат. Методы экземпляров связаны с объектами и, как следует из названия, могут использовать переменные экземпляра.


Статические методы и переменные - это управляемая версия «глобальных» функций и переменных в Java. В каких методах можно получить доступ как classname.methodName() или classInstanceName.methodName() , то есть статические методы и переменные могут быть доступны с использованием имени класса, а также экземпляров класса.

Класс не может быть объявлен как статический (поскольку это не имеет смысла. Если класс объявлен общедоступным, к нему можно получить доступ из любого места), внутренние классы могут быть объявлены статическими.


Статические методы не должны вызываться на объекте, и это когда вы его используете. Пример: ваш Main () является статичным, и вы не создаете объект для его вызова.


Статические методы не связаны с экземпляром, поэтому они не могут получить доступ к нестатическим полям в классе.

Вы бы использовали статический метод, если метод не использует никаких полей (или только статических полей) класса.

Если используются нестатические поля класса, вы должны использовать нестатический метод.


Статический метод имеет две основные цели:

  1. Для служебных или вспомогательных методов, которые не требуют какого-либо состояния объекта. Поскольку нет необходимости обращаться к переменным экземпляра, статические методы устраняют необходимость того, чтобы вызывающий объект создавал экземпляр объекта только для вызова метода.
  2. Для состояния, которое используется всеми экземплярами класса, например счетчиком. Все экземпляры должны иметь одно и то же состояние. Методы, которые просто используют это состояние, также должны быть статическими.

Статический: Obj.someMethod

Используйте static если вы хотите предоставить доступ к классу на уровне класса, то есть, где метод должен быть вызван без экземпляра класса.


Фактически, мы используем статические свойства и методы в классе, когда мы хотим использовать какую-то часть нашей программы, должна существовать там до тех пор, пока наша программа не будет запущена. И мы знаем, что для управления статическими свойствами нам нужны статические методы, поскольку они не являются частью переменной экземпляра. И без статических методов манипулировать статическими свойствами занимает много времени.


static метод - это один тип метода, который не требует инициализации какого-либо объекта для его вызова. Вы заметили, что static используется в main функции Java? Выполнение программы начинается оттуда без создания объекта.

Рассмотрим следующий пример:

 class Languages 
 {
     public static void main(String[] args) 
     {
         display();
     }

     static void display() 
     {
         System.out.println("Java is my favorite programming language.");
     }
  }






static-methods