Как все упоминают здесь, это работает, потому что get()
- статический метод. Вот способ, которым вы можете думать об этом:
Когда вы определяете класс в Java, вы по сути дела определяете данные, которые будет содержать объект, и набор методов, которые работают с этими данными. Теперь, когда вы можете иметь тысячи и тысячи объектов, не имеет смысла иметь копии всех методов для каждого из них. В результате класс сохраняет методы, которые вы определили, и выполняет их в scope объекта, для которого вы вызываете метод. Если вы попытаетесь вызвать эти методы для неинициализированного объекта, объект все еще существует, а метод все еще существует, но у него нет действительной области действия для работы, что дает вам NullPointerException
.
Исключением из этого правила являются статические методы, которые не требуют области видимости - они не ссылаются на данные, специфичные для объекта. Вот почему они могут работать независимо от того, инициализирован объект или нет.
Просто помните, что у объектов нет копий своих методов ... методы просто вызываются в области данных объекта. Таким образом, вы все равно можете получить доступ к методам нулевых (неинициализированных) объектов, но нестатические методы не имеют данных для работы.