Java static что это

Java static что это

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

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

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

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

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

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

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

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

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

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

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

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

За пределами класса, в котором они определены, статические методы и переменные могут использоваться независимо от какого-либо объекта. Для этого достаточно указать имя класса, затем точку, а потом имя метода или переменной:

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

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

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

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

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

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

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

Читайте также:  Проверка по вину авто из германии

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

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

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

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

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

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

На методы, объявленные как static, накладывается ряд ограничений.

  • Они могут вызывать только другие статические методы.
  • Они должны осуществлять доступ только к статическим переменным.
  • Они ни коим образом не могут ссылаться на члены типа this или super. (Ключевое слово super связано с наследованием и описывается в следующей главе.)

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

// Демонстрация статических переменных, методов и блоков.
class UseStatic <
static int a = 3;
static int b;
static void meth(int x) <
System.out.println ("x = " + x) ;
System.out.println ("a = " + a);
System.out.println("b = " + b) ;
>
static <
System.out.println("Статический блок инициализирован.");
b = a * 4;
>
public static void main(String args[]) <
meth(42);
>
>

Читайте также:  Мфу xerox workcentre 3225 dni

Сразу после загрузки класса UseStatic программа выполняет все операторы static. Вначале значение а устанавливается равным 3, затем программа выполняет блок static, который выводит сообщение, а затем инициализирует переменную b значением а*4, или 12. Затем программа вызывает метод main (), который обращается к методу meth (), передавая параметру х значение 42. Три оператора println () ссылаются на две статических переменные а и b на локальную переменную х.

Вывод этой программы имеет такой вид:

Статический блок инициализирован, х = 42 а = 3 b = 12

За пределами класса, в котором они определены, статические методы и переменные могут использоваться независимо от какого-либо объекта. Для этого достаточно указать имя их класса, за которым должна следовать операция точки. Например, если метод типа static нужно вызвать извне его класса, это можно выполнить, используя следующую общую форму:

Здесь имя_класса — имя класса, в котором объявлен метод тип static. Как видите, этот формат аналогичен применяемому для вызова нестатических методов через переменные объектных ссылок. Статическая переменная доступна аналогичным образом — посредством операции точки, следующей за именем класса. Так в Java реализованы управляемые версии глобальных методов и переменных.

Приведем пример. Внутри метода main () обращение к статическому методу callme () и статической переменной b осуществляется посредством имени их класса StaticDemo.

class StaticDemo <
static int a = 42;
static int b = 99;
static void callme () <
System.out.println("a = " + a);
>
>
class StaticByName <
public static void main(String args[]) <
StaticDemo.callme () ;
System.out.println("b = " + StaticDemo.b);
>
>

Вывод этой программы выглядит следующим образом:

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

Статическим может быть :

  • переменная ( переменная класса );
  • метод ( метод класса );
  • блок;
  • внутренний класс.

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

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

Преимущества статической переменной

Java static переменная не загружает память.

Пример, в котором не используется статическая переменная

Предположим, что в колледже 500 студентов. Класс Student будут задействовать память каждый раз при создании объекта. У всех студентов есть уникальное rollno и name . А college — это общее свойство для всех объектов. Если сделать его статическим, то поле будет задействовать память только один раз.

Статическое свойство Java является общим для всех объектов.

Пример статической переменной

Программа подсчета без статической переменной

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

Программа подсчета со статической переменной

Java static переменная задействует память только один раз. Если какой-либо объект изменяет значение статической переменной, она сохраняет свое значение.

2) Статический метод Java

Если ключевое слово static применяется в объявлении метода, то это static method Java .

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

Пример статического метода

Другой пример Java static метода, выполняющего обычный расчет

Ограничения для статического метода

Существует два основных ограничения для статического метода:

  1. Статический метод не может использовать нестатические члены или напрямую вызывать нестатические методы;
  2. this и super нельзя использовать в статическом контексте.

Вопрос: почему основной main метод Java является статическим?

Ответ : поскольку объект не является обязательным для вызова статического метода, если он был нестатическим. Виртуальная машина сначала вызывает Java public static void main() , что приводит к выделению дополнительной памяти.

3) Статический блок Java

  • Применяется для инициализации статического члена;
  • Выполняется перед методом main во время загрузки класса.

Пример статического блока

Вопрос: можно ли выполнить программу без метода main()?

Ответ : да, один из способов — применение модификатора static в Java , но в предыдущей версии JDK , а не в JDK 1.7 .

В JDK7 и выше вывод будет следующим:

Данная публикация представляет собой перевод статьи « Java static keyword » , подготовленной дружной командой проекта Интернет-технологии.ру

Ссылка на основную публикацию
Intel hd graphics 620 nvidia geforce mx130
Сравнительный анализ видеокарт NVIDIA GeForce MX130 и Intel HD Graphics 620 по всем известным характеристикам в категориях: Общая информация, Технические...
Dcomlaunch что это за служба
&nbsp &nbsp Практически, каждый пользователь Windows, неоднократно наблюдал в списке отображаемых диспетчером задач, несколько процессов с именем svchost.exe . Для...
Dd if dev zero
Автор: Lucky Рубрики: Linux В жизни случаются ситуации, когда хочется бесследно избавиться от информации на жестком диске. Причин этого желания...
Intel hd graphics 630 сколько памяти
Описание Intel начала продажи HD Graphics 630 5 августа 2015. Это десктопная видеокарта на архитектуре Gen. 9.5 Kaby Lake и...
Adblock detector