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

В този урок ще научим за статичната ключова дума Java заедно със статични методи, статични променливи и статични блокове с помощта на примери.

Какво е статична ключова дума в Java?

В Java, ако искаме достъп до членовете на класа, първо трябва да създадем екземпляр на класа. Но ще има ситуации, в които искаме да осъществим достъп до членовете на класа, без да създаваме никакви променливи.

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

В Mathкласа на Java има почти цялото си членове статична. И така, можем да осъществим достъп до неговите членове, без да създаваме екземпляри от класа по математика. Например,

 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.

Вътре в основния клас можем да видим, че извикваме нестатичния метод, използвайки обекта на класа ( 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 ще имат отделни копия на променливата възраст. И те са различни един от друг.

Ако обаче декларираме променлива статична, всички обекти от класа споделят една и съща статична променлива. Това е така, защото подобно на статичните методи, статичните променливи също са свързани с класа. И не е нужно да създаваме обекти от класа за достъп до статичните променливи. Например,

 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)); ) )

Изход :

 min + 1 = 6 max + 1 = 11

В горната програма декларирахме нестатична променлива с име min и статична променлива с име max в класа Test.

Вътре в главния клас можем да видим, че извикваме нестатичната променлива, използвайки обекта на класа ( 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 можем да декларираме клас в друг клас. Такива класове са известни като вложени класове. Вложените класове са от 2 вида:

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

Например,

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

За да научите повече, посетете вложен клас Java.

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