freeCodeCamp/guide/russian/java/static/index.md

132 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
title: Static
localeTitle: статический
---
# статический
Когда вы объявляете переменную или метод статическими, она принадлежит классу, а не конкретному экземпляру. Это означает, что существует только один экземпляр статического члена, даже если вы создаете несколько объектов класса или если вы его не создаете. Он будет использоваться всеми объектами.
Статическое ключевое слово можно использовать с переменными, методами, блоками кода и вложенными классами.
## Статические переменные
**_Пример:_**
```java
public class Counter {
public static int COUNT = 0;
Counter() {
COUNT++;
}
}
```
Переменная `COUNT` будет использоваться всеми объектами этого класса. Когда мы создаем объекты нашего класса Counter в main и получаем доступ к статической переменной.
```java
public class MyClass {
public static void main(String[] args) {
Counter c1 = new Counter();
Counter c2 = new Counter();
System.out.println(Counter.COUNT);
}
}
// Outputs "2"
```
Outout равно 2, потому что переменная `COUNT` статична и увеличивается каждый раз при создании нового объекта класса Counter. Вы также можете получить доступ к статической переменной с помощью любого объекта этого класса, такого как `c1.COUNT` .
## Статические методы
Статический метод относится к классу, а не к экземплярам. Таким образом, его можно вызвать без создания экземпляра класса. Он используется для изменения статического содержимого класса. Существуют некоторые ограничения статических методов:
1. Статический метод не может использовать нестатические элементы (переменные или функции) класса.
2. Статический метод не может использовать `this` или `super` ключевые слова.
**_Пример:_**
```java
public class Counter {
public static int COUNT = 0;
Counter() {
COUNT++;
}
public static void increment(){
COUNT++;
}
}
```
Статические методы также можно вызывать из экземпляра класса.
```java
public class MyClass {
public static void main(String[] args) {
Counter.increment();
Counter.increment();
System.out.println(Counter.COUNT);
}
}
// Outputs "2"
```
Выходной сигнал равен 2, поскольку он увеличивается с помощью статического метода `increament()` . Подобно статическим переменным, статические методы также могут быть доступны с использованием переменных экземпляра.
## Статические блоки
Статические блоки кода используются для инициализации статических переменных. Эти блоки выполняются сразу после объявления статических переменных.
**_Пример:_**
```java
public class Saturn {
public static final int MOON_COUNT;
static {
MOON_COUNT = 62;
}
}
```
```java
public class Main {
public static void main(String[] args) {
System.out.println(Saturn.MOON_COUNT);
}
}
// Outputs "62"
```
Вывод равен 62, потому что переменной `MOON_COUNT` присваивается это значение в статическом блоке.
## Статические вложенные классы
Класс может иметь статический вложенный класс, к которому можно получить доступ, используя внешнее имя класса.
**_Пример:_**
```java
public class Outer {
public Outer() {
}
public static class Inner {
public Inner() {
}
}
}
```
В приведенном выше примере класс `Inner` может быть напрямую доступен как статический член класса `Outer` .
```java
public class Main {
public static void main(String[] args) {
Outer.Inner inner = new Outer.Inner();
}
}
```
Один из вариантов использования статических вложенных классов в [шаблоне Builder,](https://en.wikipedia.org/wiki/Builder_pattern#Java) широко используемом в java.