Что такое ключевое слово static в Java?

«Что такое ключевое слово static в Java?» — вопрос из категории Java, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Основные случаи использования:

  • Статические поля (переменные класса): Общая память для всех объектов. Часто используется для констант, счётчиков или общих настроек.

    public class AppConfig {
        public static final String APP_NAME = "MyApp"; // Константа
        public static int activeUserCount = 0; // Счётчик
    }
  • Статические методы: Могут быть вызваны без создания объекта класса. Не могут напрямую обращаться к нестатическим полям и методам. Часто используются в утилитарных классах (например, Math.sqrt()).

    public class StringUtils {
        public static boolean isEmpty(String str) {
            return str == null || str.trim().isEmpty();
        }
    }
    // Вызов: StringUtils.isEmpty("text");
  • Статический блок инициализации: Выполняется один раз при загрузке класса в память.

    public class DatabaseConnector {
        static {
            // Инициализация драйверов БД или статических ресурсов
            System.out.println("Class DatabaseConnector loaded.");
        }
    }

Связь с тестированием: Понимание static критично для тестирования, так как статические поля создают общее состояние (shared state) между тестами. Это может приводить к недетерминированным результатам, если состояние не сбрасывается. При написании модульных тестов (например, с JUnit) для классов, использующих статику, часто применяются паттерны вроде Dependency Injection или инструменты вроде PowerMock для изоляции и мокирования статических вызовов.