Я только что подытожил некоторые моменты, высказанные в ответах.Если вы обнаружите что-то неправильное, пожалуйста, исправьте его.
Масштабирование: У нас есть ровно один экземпляр статической переменной на JVM.Предположим, что мы разрабатываем систему управления библиотекой, и мы решили присвоить названию книги статическую переменную, поскольку в каждой книге только одна переменная.Но если система растет и мы используем несколько JVM, то у нас нет способа выяснить, с какой книгой мы имеем дело?
Thread-Safety: И переменная экземпляра, и статическая переменная должныконтролироваться при использовании в многопоточной среде.Но в случае переменной экземпляра она не нуждается в защите, если она явно не разделена между потоками, но в случае статической переменной она всегда используется всеми потоками в процессе.
Тестирование: Хотя тестируемый дизайн не равен хорошему дизайну, но мы редко наблюдаем хороший дизайн, который не подлежит тестированию.Так как статические переменные представляют глобальное состояние, и их очень трудно проверить.
Рассуждение о состоянии: Если я создаю новый экземпляр класса, мы можем рассуждать о состоянии этого экземпляра.но если он имеет статические переменные, то он может находиться в любом состоянии.Зачем?Поскольку возможно, что статическая переменная была изменена каким-то другим экземпляром, поскольку статическая переменная является общей для всех экземпляров.
Сериализация: Сериализация также плохо работает с ними.
Создание и уничтожение: Управление созданием и уничтожением статических переменных невозможно.Обычно они создаются и уничтожаются во время загрузки и выгрузки программы.Это означает, что они плохо подходят для управления памятью, а также добавляют время инициализации при запуске.
Но что, если они нам действительно нужны?
Но иногда мы можем действительно нуждаться в них.Если мы действительно чувствуем потребность во многих статических переменных, которые совместно используются приложением, тогда одним из вариантов является использование шаблона Singleton Design, который будет иметь все эти переменные.Или мы можем создать некоторый объект, который будет иметь эти статические переменные и может передаваться.
Также, если статическая переменная помечена как финальная, она становится константой, и значение, присвоенное ей один раз, не может быть изменено.Это означает, что он избавит нас от всех проблем, с которыми мы сталкиваемся из-за своей изменчивости.