Java for Beginner
743 subscribers
708 photos
196 videos
12 files
1.14K links
Канал от новичков для новичков!
Изучайте Java вместе с нами!
Здесь мы обмениваемся опытом и постоянно изучаем что-то новое!

Наш YouTube канал - https://www.youtube.com/@Java_Beginner-Dev

Наш канал на RUTube - https://rutube.ru/channel/37896292/
Download Telegram
Основы ООП в Java

Глава 6. Ключевые модификаторы ООП

static: поля, методы, блоки инициализации

Модификатор static означает "статический" и привязывает элемент к классу, а не к экземпляру (объекту). Static-элементы существуют в одном экземпляре на класс, независимо от количества объектов.

Зачем нужен
static:
Общие данные: Для переменных, общих для всех объектов (например, счетчик экземпляров).
Утилиты: Для методов, не зависящих от состояния объекта (например, Math.sqrt()).
Эффективность: Избежать создания объектов для вызова методов.
Инициализация: Блоки для выполнения кода при загрузке класса.


Static — инструмент для класс-уровня логики в ООП, но не злоупотребляйте: он может нарушать инкапсуляцию.
Static поля: Общие переменные класса
Static поля (class variables) принадлежат классу и делятся всеми объектами. Они инициализируются при загрузке класса.

Синтаксис:
static type fieldName = value;


Доступ: Через ClassName.fieldName или объект.fieldName (но рекомендуется через класс).


Пример:
public class Counter {
public static int count = 0; // Static поле

public Counter() {
count++; // Увеличивает общее значение
}
}


Использование:
public class Main {
public static void main(String[] args) {
new Counter();
new Counter();
System.out.println(Counter.count); // 2
}
}


Нюанс:
Static поля инициализируются по умолчанию (0 для чисел, null для объектов). Можно изменить в static блоке.


Static методы: Утилиты класса

Static методы принадлежат классу и вызываются без объекта. Они не имеют доступа к non-static полям/методам (нет this).

Синтаксис:
static returnType methodName(params) { ... }
Доступ: ClassName.methodName().


Пример:
public class MathUtils {
public static int add(int a, int b) {
return a + b;
}
}


Вызов:
int sum = MathUtils.add(5, 3);  // 8


Нюанс: Static методы не override — это method hiding. Вызов зависит от типа ссылки, не объекта.


Static блоки инициализации: Код при загрузке класса

Static блоки — код, выполняющийся один раз при загрузке класса (перед конструкторами).

Синтаксис:
static {
// Код
}


Пример:
public class Config {
public static String appName;

static {
appName = "MyApp"; // Инициализация при загрузке
System.out.println("Класс загружен!");
}
}


Нюанс: Несколько блоков выполняются в порядке объявления. Полезно для сложной инициализации static полей (например, загрузка конфигурации).


Все нюансы static

Доступ и видимость:
Static элементы доступны без объекта, но non-static — нет из static контекста.
Нюанс: Из
static метода нельзя this.field или non-static method() — ошибка.

Наследование:
Static поля/методы наследуются, но не override — hiding. ChildClass.staticMethod() скрывает ParentClass.staticMethod().
Нюанс: Вызов через ссылку: Animal a = new Dog(); a.staticMethod() — вызовет Animal.version (зависит от типа ссылки).


Инициализация:
Static поля/блоки инициализируются при первой загрузке класса (class loading).
Нюанс: Lazy loading — не инициализируется, пока не используется.


Ошибки:
Доступ к non-static из static — ошибка компиляции.
Static в интерфейсах: Да, с Java 8 (static методы).
Static классы: Nested классы могут быть static (не зависят от внешнего объекта).

Дизайн:
Избегайте mutable static полей — проблемы в многопоточности.
Используйте для констант (
static final), утилит (Math), singleton.
Нюанс:
Static блоки для JDBC драйверов или логирования.

Многопоточность: Static поля общие — используйте synchronization для изменений.


Как создать это в IntelliJ IDEA

Static поле/метод: Добавьте static — IDE подскажет доступ.
Static блок: Напишите static {} — IDE форматирует.
Тестирование: Вызовите
static через класс — IDE автодополнит.


Полезные советы для новичков

Константы: public
static final для глобальных.
Утилиты:
Static методы для helper-классов.
Избегайте состояния:
Static поля — только immutable.
Тестируйте: Проверьте доступ из
static/non-static.
Ресурсы: Oracle Tutorials on
Static Members.


#Java #для_новичков #beginner #OOP #static
👍3