Почему константы времени компиляции можно сделать статичными в нестатических внутренних классах?
Предположим, у нас есть код, как показано ниже.
public class Outer{
class Inner{
public static final String s = "abc";
}
static class Nested{
public static final SomeOtherClass instance = new SomeOtherClass();
}
}
Я понимаю, чтобы создать объектнестатические внутренние классы нужен объект Outer класса. static
означает связанный с классом и для доступа к нему объект не требуется создавать экземпляр. Нестатический внутренний класс можно использовать только после создания экземпляра объекта Outer. Наличие каких-либо статических ссылок в нем может не иметь смысла.
Мои вопросы:
Может ли не статический внутренний класс загружаться без какого-либо явного объекта класса Outer?
Зачемконстанты времени компиляции (Строковые литералы, так как они обрабатываются особым образом в пуле строк и примитивных типах) допускаетсястатический вне статичный внутренний класс ?
Изменить: Почему нельзя сделать статические постоянные времени не компилировать, я знаю, как в JLS, но просто хочу знать,что бы пошло не так, каково было намерение сделать это правило.