В Java ключевое слово static
обычно помечает метод или поле как существующие не один раз для экземпляра класса, а когда-либо. В любом случае класс существует один раз, так что в действительности все классы «статичны» в этом смысле, и все объекты являются экземплярами классов.
static
имеет значение для внутренних классов, которое совершенно иное: обычно экземпляр внутреннего класса может обращаться к членам экземпляра внешнего класса, к которому он привязан, но если внутренний класс static
, он не имеет такой ссылки и может быть создан без экземпляра внешнего класса. Возможно, вы видели это где-то, а затем пытались использовать его в классе высшего уровня, где это не имеет смысла.
Или, может быть, вы видели это на других языках, таких как C #, чей синтаксис очень похож на синтаксис Java.
(Однажды я не мог понять, почему экземпляр внешнего класса не собирался мусором - это потому, что я хранил ссылку на один из его экземпляров внутреннего класса в другом месте, а внутренний класс не был static
и так имел ссылку на экземпляр внешнего класса. Поэтому по умолчанию я делаю внутренние классы static
сейчас.)