Заметки по 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