Статическое ключевое слово Java (с примерами)

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

Что такое статическое ключевое слово в Java?

В Java, если мы хотим получить доступ к членам класса, мы должны сначала создать экземпляр класса. Но будут ситуации, когда мы захотим получить доступ к членам класса без создания каких-либо переменных.

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

MathКласс в Java имеет почти все его члены статики. Таким образом, мы можем получить доступ к его членам, не создавая экземпляров класса Math. Например,

 public class Main ( public static void main( String() args ) ( // accessing the methods of the Math class System.out.println("Absolute value of -12 = " + Math.abs(-12)); System.out.println("Value of PI = " + Math.PI); System.out.println("Value of E = " + Math.E); System.out.println("2^2 = " + Math.pow(2,2)); ) )

Выход :

 Абсолютное значение -12 = 12 Значение PI = 3,141592653589793 Значение E = 2,718281828459045 2 2 = 4,0

В приведенном выше примере мы не создали никаких экземпляров Mathкласса. Но мы можем получить доступ к его методам: abs()и pow()и переменным: PIи E.

Это возможно, потому что методы и переменные Mathкласса статичны.

Статические методы

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

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

 class Test ( // static method inside the Test class public static void method() (… ) ) class Main ( // invoking the static method Test.method(); )

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

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

Пример 1: статические и нестатические методы Java

 class StaticTest ( // non-static method int multiply(int a, int b)( return a * b; ) // static method static int add(int a, int b)( return a + b; ) ) public class Main ( public static void main( String() args ) ( // create an instance of the StaticTest class StaticTest st = new StaticTest(); // call the nonstatic method System.out.println(" 2 * 2 = " + st.multiply(2,2)); // call the static method System.out.println(" 2 + 3 = " + StaticTest.add(2,3)); ) )

Выход :

 2 * 2 = 4 2 + 3 = 5

В приведенной выше программе мы объявили нестатический метод с именем multiply()и статический метод с именем add()внутри класса StaticTest.

Внутри класса Main мы видим, что вызываем нестатический метод, используя объект класса ( st.multiply(2, 2)). Однако мы вызываем статический метод, используя имя класса ( StaticTest.add(2, 3)).

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

В Java, когда мы создаем объекты класса, каждый объект будет иметь свою собственную копию всех переменных класса. Например,

 class Test ( // regular variable int age; ) class Main ( // create instances of Test Test test1 = new Test(); Test test2 = new Test(); )

Здесь оба объекта test1 и test2 будут иметь отдельные копии переменной age. И они отличаются друг от друга.

Однако, если мы объявляем переменную статической, все объекты класса используют одну и ту же статическую переменную. Это потому, что, как и статические методы, статические переменные также связаны с классом. И нам не нужно создавать объекты класса для доступа к статическим переменным. Например,

 class Test ( // static variable static int age; ) class Main ( // access the static variable Test.age = 20; )

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

Пример 2: статические и нестатические переменные Java

 class Test ( // static variable static int max = 10; // non-static variable int min = 5; ) public class Main ( public static void main(String() args) ( Test obj = new Test(); // access the non-static variable System.out.println("min + 1 = " + (obj.min + 1)); // access the static variable System.out.println("max + 1 = " + (Test.max + 1)); ) )

Выход :

 мин + 1 = 6 макс + 1 = 11

В приведенной выше программе мы объявили нестатическую переменную с именем min и статическую переменную с именем max внутри класса Test.

Внутри класса Main мы видим, что вызываем нестатическую переменную, используя объект класса ( obj.min + 1). Однако мы вызываем статическую переменную, используя имя класса ( Test.max + 1).

Примечание . Статические переменные редко используются в Java. Вместо этого используются статические константы. Эти статические константы определяются static finalключевым словом и представлены в верхнем регистре. Вот почему некоторые люди предпочитают также использовать прописные буквы для статических переменных.

Доступ к статическим переменным и методам внутри класса

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

 public class Main ( // static variable static int age; // static method static void display() ( System.out.println("Static Method"); ) public static void main(String() args) ( // access the static variable age = 30; System.out.println("Age is " + age); // access the static method display(); ) )

Выход :

 Возраст - 30 Статический метод

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

Статические блоки

В Java статические блоки используются для инициализации статических переменных. Например,

 class Test ( // static variable static int age; // static block static ( age = 23; ) )

Здесь мы видим, что мы использовали статический блок с синтаксисом:

 static ( // variable initialization )

The static block is executed only once when the class is loaded in memory. The class is loaded if either the object of the class is requested in code or the static members are requested in code.

A class can have multiple static blocks and each static block is executed in the same sequence in which they have been written in a program.

Example 3: Use of static block in java

 class Main ( // static variables static int a = 23; static int b; static int max; // static blocks static ( System.out.println("First Static block."); b = a * 4; ) static ( System.out.println("Second Static block."); max = 30; ) // static method static void display() ( System.out.println("a = " + a); System.out.println("b = " + b); System.out.println("max = " + max); ) public static void main(String args()) ( // calling the static method display(); ) )

Output:

 First Static block. Second Static block. a = 23 b = 92 max = 30

In the above program. as soon as the Main class is loaded,

  • The value of a is set to 23.
  • The first static block is executed. Hence, the string First Static block is printed and the value of b is set to a * 4.
  • The second static block is executed. Hence, the string Second Static block is printed and the value of max is set to 30.
  • И, наконец, display()выполняются операторы печати внутри метода .

Вложенный статический класс

В Java мы можем объявить класс внутри другого класса. Такие классы известны как вложенные классы. Вложенные классы бывают двух типов:

  • Статические вложенные классы
  • Нестатические вложенные классы

Например,

 class OuterClass ( // static nested class static class NestedClass (… ) // non-static nested class class InnerClass (… ) )

Чтобы узнать больше, посетите Java Nested Class.

Интересные статьи...