static ключевое слово в Java широко используется в программировании на Java. Ключевое слово static в Java используется для создания переменной уровня класса в Java. Статические переменные и методы являются частью класса, а не экземпляров класса.
static ключевое слово в Java
Java static ключевое слово можно использовать в пяти случаях, как показано на изображении ниже.
Мы обсудим четыре из них здесь, пятый был введен в Java 8, и об этом было рассказано в изменениях в интерфейсе Java 8.
-
Статическая переменная Java
Мы можем использовать ключевое слово
static
с переменной уровня класса. Статическая переменная является переменной класса и не принадлежит объекту/экземпляру класса. Поскольку статические переменные разделяются между всеми экземплярами объекта, они не являются потокобезопасными. Обычно статические переменные используются с ключевым словом final для общих ресурсов или констант, которые могут использоваться всеми объектами. Если статическая переменная не является закрытой, мы можем получить к ней доступ с помощьюИмяКласса.ИмяПеременной
// Пример статической переменной private static int count; public static String str; public static final String DB_USER = "мойпользователь";
-
Статический метод Java
То же самое, что и статическая переменная, статический метод принадлежит классу, а не экземплярам класса. Статический метод может обращаться только к статическим переменным класса и вызывать только статические методы класса. Обычно статические методы являются вспомогательными методами, которые мы хотим выставить наружу для использования другими классами без необходимости создания экземпляра. Например, класс Collections. Обертки Java и утилитарные классы содержат много статических методов. Основной метод main(), который является точкой входа программы на Java, сам по себе является статическим методом.
//пример статического метода public static void setCount(int count) { if(count > 0) StaticExample.count = count; } //статический утилитарный метод public static int addInts(int i, int...js){ int sum=i; for(int x : js) sum+=x; return sum; }
Начиная с Java 8, у нас также могут быть статические методы в интерфейсах. Для получения более подробной информации читайте Изменения в интерфейсах Java 8.
-
Статический блок Java
Статический блок Java – это группа операторов, которая выполняется, когда класс загружается в память с помощью Java ClassLoader. Статический блок используется для инициализации статических переменных класса. В основном его используют для создания статических ресурсов при загрузке класса. Мы не можем получить доступ к нестатическим переменным в статическом блоке. В классе может быть несколько статических блоков, хотя это не имеет особого смысла. Код статического блока выполняется только один раз, когда класс загружается в память.
static{ //может использоваться для инициализации ресурсов при загрузке класса System.out.println("Статический блок примера Java"); //может получать доступ только к статическим переменным и методам str="Тест"; setCount(2); }
-
Статический класс Java
Мы можем использовать ключевое слово static с вложенными классами. Ключевое слово static нельзя использовать с классами верхнего уровня. Статический вложенный класс такой же, как и любой другой класс верхнего уровня, и вложен только для удобства упаковки. Читать: Вложенные классы Java
Давайте посмотрим на все использования ключевого слова static в Java в примерной программе. StaticExample.java
package com.journaldev.misc;
public class StaticExample {
//статический блок
static{
//может использоваться для инициализации ресурсов при загрузке класса
System.out.println("StaticExample static block");
//может получить доступ только к статическим переменным и методам
str="Test";
setCount(2);
}
//несколько статических блоков в одном классе
static{
System.out.println("StaticExample static block2");
}
//пример статической переменной
private static int count; //kept private to control its value through setter
public static String str;
public int getCount() {
return count;
}
//пример статического метода
public static void setCount(int count) {
if(count > 0)
StaticExample.count = count;
}
//статический утилитный метод
public static int addInts(int i, int...js){
int sum=i;
for(int x : js) sum+=x;
return sum;
}
//пример статического класса - используется только для удобства упаковки
public static class MyStaticClass{
public int count;
}
}
Давайте посмотрим, как использовать статическую переменную, метод и статический класс в тестовой программе. TestStatic.java
package com.journaldev.misc;
public class TestStatic {
public static void main(String[] args) {
StaticExample.setCount(5);
//неприватные статические переменные могут быть доступны с именем класса
StaticExample.str = "abc";
StaticExample se = new StaticExample();
System.out.println(se.getCount());
//статические переменные класса и экземпляра одинаковы
System.out.println(StaticExample.str +" is same as "+se.str);
System.out.println(StaticExample.str == se.str);
//статические вложенные классы похожи на обычные классы верхнего уровня
StaticExample.MyStaticClass myStaticClass = new StaticExample.MyStaticClass();
myStaticClass.count=10;
StaticExample.MyStaticClass myStaticClass1 = new StaticExample.MyStaticClass();
myStaticClass1.count=20;
System.out.println(myStaticClass.count);
System.out.println(myStaticClass1.count);
}
}
Вывод вышеприведенной примерной программы с ключевым словом static в Java:
StaticExample static block
StaticExample static block2
5
abc is same as abc
true
10
20
Обратите внимание, что код статического блока выполняется первым и только один раз, как только класс загружается в память. Другие выводы являются самоочевидными.
Java статический импорт
Обычно мы получаем доступ к статическим элементам с использованием ссылки на класс, начиная с Java 1.5 мы можем использовать статический импорт Java, чтобы избежать ссылки на класс. Внизу приведен простой пример статического импорта Java.
package com.journaldev.test;
public class A {
public static int MAX = 1000;
public static void foo(){
System.out.println("foo static method");
}
}
package com.journaldev.test;
import static com.journaldev.test.A.MAX;
import static com.journaldev.test.A.foo;
public class B {
public static void main(String args[]){
System.out.println(MAX); //normally A.MAX
foo(); // normally A.foo()
}
}
Обратите внимание на оператор импорта, для статического импорта мы должны использовать import static
, за которым следует полностью классифицированный статический элемент класса. Для импорта всех статических элементов класса мы можем использовать * как в import static com.journaldev.test.A.*;
. Мы должны использовать это только тогда, когда мы используем статическую переменную класса несколько раз, это неудобно для чтения. Обновление: Я недавно создал видео, чтобы объяснить статическое ключевое слово в Java, вы должны посмотреть его ниже. https://www.youtube.com/watch?v=2e-l1vb\_fwM
Source:
https://www.digitalocean.com/community/tutorials/static-keyword-in-java