Что такое static java
Перейти к содержимому

Что такое static java

  • автор:

Ключевое слово static

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

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

У статических методов есть ряд ограничений:

  • они могут вызывать только другие статические методы
  • они могут непосредственно осуществлять доступ только к статическим переменным
  • они не могут ссылаться на члены типа this или super

В большинстве случаев среда разработки или компилятор заметят ошибку программиста и выведут предупреждение о неправильном использовании переменных.

Например, нельзя писать такой код.

 public class HelloApp < int number = 5; // ошибка -- следует добавить ключевое слово static public static void main(String[] args) < System.out.println(number); // не скомпилируется >> 

В статическом методе main() мы пытаемся задействовать нестатическую переменную number.

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

Инициализирующий блок

Если для инициализации статических переменных требуется произвести вычисления, то для этой цели можно объявить инициализирующий блок, который будет выполняться только один раз при первой загрузке класса. Инициализирующий блок создаётся при помощи фигурных скобок и перед ними ставится ключевое слово static.

Любые инициализирующие блоки выполняются до конструкторов.

Создадим класс, который будет содержать статические переменные, статический метод и инициализирующий блок

 class UsingStaticClass < // статические переменные static int a = 2; static int b; // инициализирующий блок static < b = a * 2; >// статический метод static void someMethod(int x) < Log.i(TAG, "x = " + x); Log.i(TAG, "a = " + a); Log.i(TAG, "b bg-light">имя_класса.метод() имя_класса.переменная

В Android имеются много статических методов и переменных. Например, метод Log.i(). Так как метод является статическим, мы не объявляем Log log = new Log(). Достаточно сразу вызвать метод.

 Log.i(TAG, "Кот отказался мяукать"); 

Также часто используется статический метод Toast makeText().

Статическая переменная

Чтобы лучше уяснить механизм работы статической переменной, напишем следующий пример. Создадим класс Cat.

 package ru.alexanderklimov.expresscourse; public class Cat < private String mName; private int mAge; static int sId = 0; static int sTestNumber = 8; public Cat(String name, int age) < mName = name; mAge = age; sId++; >@Override public String toString() < return this.mName; >> 

Мы создали две статические переменные. Одну не трогаем, а вторую увеличиваем на единицу в конструкторе.

Переходим в класс активности и проверяем, чему равны эти переменные.

 Log.d(TAG, Cat.sId + ""); Log.d(TAG, Cat.sTestNumber + ""); 

Программа вернёт значения, которые мы сами установили — 0 и 8. Обратите внимание, чтоб мы даже не создавали экземпляры класса, а обращались напрямую к классу.

А теперь создадим двух котов с именами и возрастом. А между котами явно увеличим одну статическую переменную. И снова проверим значения статических переменных.

 Log.d(TAG, Cat.sId + ""); Log.d(TAG, Cat.sTestNumber + ""); // Создаём первого кота Cat firstCat = new Cat("vasya", 2); Log.d(TAG, Cat.sId + ""); Log.d(TAG, Cat.sTestNumber + ""); Cat.sTestNumber = 15; // устанавливаем новое значение // Создаём второго кота Cat secondCat = new Cat("murzik", 12); Log.d(TAG, Cat.sId + ""); Log.d(TAG, Cat.sTestNumber + ""); 
 0 8 1 8 2 15 

Первые два значения понятны из предыдущего примера. Затем при создании первого кота, переменная sId автоматически увеличивается на единицу. Вторая переменная остаётся без изменений.

Затем мы явно указываем новое значение для второй переменной, и создаём второго кота, у которого также сработает увеличение на единицу первой переменной. Проверка убедит нас в этом. Было 1 и 8, стало 2 и 15.

Вариант с автоматическим увеличением иногда используют для создания уникального идентификатора объекта, например, товара в магазине. Заводя новый товар, мы автоматически получаем его новый номер, используя статическую переменную.

Что такое static?

Ключевое слово static используется для объявления вложенных классов, статических методов, полей, блоков инициализации и статических импортов.

Статические поля и методы – члены класса а не экземпляра, потому к ним можно обращаться через имя класса. Код статического блока или метода имеет доступ только к статическим членам. Статические поля не участвуют в сериализации.

Для статических методов используется раннее связывание, то есть вызов конкретного метода разрешается на этапе компиляции, не работают перегрузка и переопределение в наследниках.

Статический блок инициализации выполняется потокобезопасно, один раз сразу после загрузки класса класслоадером. Инициализаторы статических полей выполняются в неявном статическом блоке. Блоков может быть несколько, выполнятся они в порядке объявления.

Статический импорт ( static import ) импортирует статические члены классов в .java -файл.

Ключевое слово static

Ключевое слово языка Java static используется для объявления статических членов класса — методов и переменных. Также бывают статические блоки.

Разница между статическими данными и обычными членами класса состоит в том, что обращение к обычному члену класса должно осуществляться только в сочетании с объектом его класса. Когда же член класса объявлен с ключевым словом static, он доступен и без ссылки на какой-нибудь объект.

Презентацию с видео можно скачать на Patreon .

  1. Статические переменные
  2. Статические методы
  3. Статический блок
  4. Java static import
  5. Задания

Trustpilot
Комментарии

Зарегистрируйтесь или войдите, чтобы иметь возможность оставить комментарий.

Что значит Static в Java?

Static — это модификатор без доступа. Это означает, что что-то (поле, метод, блок или вложенный класс) связано с типом, а не с каким-либо конкретным экземпляром типа.

Ключевое слово Static можно применить к:

В Java статические методы могут быть вызваны без создания объекта класса.

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

Пример
public class TestClass < public static void main(String[] args) < TestClass tc = new TestClass();// создать экземпляр класса tc.ShowMessage(); // вызов метода с использованием экземпляра >void ShowMessage() < System.out.println("Here is the message"); >>

Когда мы создаем статический метод внутри класса, методы могут быть вызваны без создания объекта класса.

Пример
public class TestClass < public static void main(String[] args) < ShowMessage(); // вызов без экземпляра creting >static void ShowMessage() < System.out.println("Here is the message using static"); >>

В Java статический метод может получить доступ только к статическим переменным класса и вызвать только статические методы класса. Обычно статические методы — это методы утилиты, которые мы хотим раскрывать для использования другими классами без необходимости создания экземпляра. Методы класса часто используются для предоставления глобальных функций для программ Java. Например, методы в пакете Java.lang.Math являются методами класса. Поскольку статические методы также не относятся к определенному экземпляру, они не могут ссылаться на члены экземпляра. Статические члены могут ссылаться только на статические члены.

Особенности статического метода

  1. Статический метод — это метод, который принадлежит классу, а не экземпляру (объекту)
  2. Статический метод может быть вызван без необходимости создания экземпляра класса
  3. Статический метод может вызывать только другие статические методы и не может вызывать нестатический метод из него
  4. Статический метод может получить доступ к члену статических данных и может изменить его значение.
  5. Статический метод не может ссылаться на это или супер-ключевые слова в любом случае

Java Static переменная

Статическая переменная — это та, которая связана с классом, а не с экземпляром (объектом) этого класса. Они инициализируются только один раз, в начале выполнения. Единый экземпляр, который будет использоваться всеми экземплярами класса, и к нему можно получить доступ непосредственно по имени класса и не нуждается в каком-либо объекте. Одним из распространенных применений static является создание постоянного значения, которое привязано к классу.

Например, если у вас есть переменная: private static int stc = 0; и вы увеличиваете его (stc ++) в одном экземпляре, это изменение будет отражено во всех экземплярах. stc теперь будет 1 во всех случаях.

Блок инициализации

Статический инициализатор представляет собой статический <> блок кода внутри класса Java и запускается только за один раз до вызова конструктора или основного метода. Блок кода со статическим модификатором означает инициализатор класса; без статического модификатора блок кода является инициализатором экземпляра.

public class TestClass < static < System.out.println("Hello before main"); >>

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

Однако из Java 7 это больше не работает, даже если он компилируется, при попытке его выполнить появляется следующая ошибка:

Main class should contain method: public static void main (String[] args).

Вложенный класс

Вложенные классы в Java делятся на две категории: статические и нестатические. Вложенные классы, объявленные static, просто называются статическими вложенными классами.

Пример
public class OuterClass < public static class StaticNestedClass < >public class NonStaticNestedClass < >>

Чтобы создать объект для статического вложенного класса, используйте следующий синтаксис:

OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();

Главное различие между ними, вы не можете создать экземпляр NonStaticNestedClass без OuterClass, тогда как вы можете создать объект StaticNestedClass независимо.

Разница между статическим вложенным классом и не статическим вложенным классом

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

Класс Nonstatic Nested неявно связан с окружающим экземпляром содержащего класса, это означает, что можно вызвать методы и получить доступ к окружающим экземплярам. Одним распространенным применением нестатического вложенного класса является определение класса адаптера.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *