Заметки по Java [7]

Почему мы используем статические ключевые слова в Java?

  • Ключевое слово static в Java в основном используется для управления памятью.
  • Ключевое слово static в Java используется для совместного использования одной и той же переменной или метода данного класса.
  • Ключевое слово static – это модификатор доступа в Java, который применим к переменным, методам, блокам и вложенные классы.

Как создать статический элемент?

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

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

// A static member can be accessed before instantiating a class

class Test {
    // static method
    static void m1() {
        System.out.println("from m1");
    }

    public static void main(String[] args) {
        // calling m1 without creating
        // any object of class Test
        m1();
    }
}

Вывод

from m1

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

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

// The use of static blocks

class Test {
    // static variable
    static int a = 10;
    static int b;

    // static block
    static {
        System.out.println("Static block initialized.");
        b = a * 4;
    }

    public static void main(String[] args) {
        System.out.println("from main");
        System.out.println("Value of a : " + a);
        System.out.println("Value of b : " + b);
    }
}

Вывод

Static block initialized.
from main
Value of a : 10
Value of b : 40

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

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

  • Мы можем создавать статические переменные только на уровне класса.
  • Блок static и переменные static выполняются в том порядке, в котором они присутствуют в программе.
// Execution of static blocks and variables

class Test {
    // static variable
    static int a = m1();

    // static block
    static {
        System.out.println("Inside static block");
    }

    // static method
    static int m1() {
        System.out.println("from m1");
        return 20;
    }

    // static method(main !!)
    public static void main(String[] args) {
        System.out.println("Value of a : " + a);
        System.out.println("from main");
    }
}

Вывод

from m1
Inside static block
Value of a : 20
from main

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

Если метод объявлен с ключевым словом static, он называется статическим методом. Наиболее распространенным примером статического метода является метод main(). Как обсуждалось выше, к любому статическому члену можно получить доступ до того, как будут созданы какие-либо объекты его класса, и без ссылки на какой-либо объект.

Методы, объявленные как статические, имеют несколько ограничений:

  • Они могут только напрямую вызывать другие статические методы.
  • Они могут только напрямую обращаться к статическим данным.
  • Они никоим образом не могут ссылаться на this или super.
// Restriction on static methods

class Test {
    // static variable
    static int a = 10;

    // instance variable
    int b = 20;

    // static method
    static void m1() {
        a = 20;
        System.out.println("from m1");

        // Cannot make a static reference to the non-static field b
        b = 10; // compilation error

        // Cannot make a static reference to the
        // non-static method m2() from the type Test
        m2(); // compilation error

        // Cannot use super in a static context
        System.out.println(super.a); // compiler error
    }

    // instance method
    void m2() {
        System.out.println("from m2");
    }


    public static void main(String[] args) {
        // main method
    }
}

Вывод

prog.java:18: error: non-static variable b cannot be referenced from a static context
         b = 10; // compilation error
         ^
prog.java:22: error: non-static method m2() cannot be referenced from a static context
         m2();  // compilation error
         ^
prog.java:25: error: non-static variable super cannot be referenced from a static context
         System.out.println(super.a); // compiler error 
                            ^
prog.java:25: error: cannot find symbol
         System.out.println(super.a); // compiler error 
                                 ^
  symbol: variable a
4 errors

Статические классы

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

// Demonstrate use of static keyword with Classes

import java.io.*;

public class GFG {

    private static String str = "GeeksforGeeks";

    // Static class
    static class MyNestedClass {

        // non-static method
        public void disp() {
            System.out.println(str);
        }
    }

    public static void main(String args[]) {
        GFG.MyNestedClass obj = new GFG.MyNestedClass();
        obj.disp();
    }
}

Вывод

GeeksforGeeks

Ссылка