2012-01-01 3 views
4

Когда я определить статические или постоянные члены, например:
public static final Font BIG_FONT = new Font("", Font.BOLD, 18);
я заметил, что они загружаются только когда я первый использовать их, что приводит либо в замерзает во время выполнения или заставляет меня как-то преднатяг их принудительно «используя» константу при запуске программы.Загрузка констант при запуске программы

Не являются ли статические элементы такого типа загружаемыми при запуске программы, а не ожиданием загрузки при первом использовании? Как я могу убедиться, что они предварительно загружены?

Заранее спасибо.

ответ

2

В Java статика инициализируется при первом использовании класса, а не при первом использовании статического члена. Вы можете принудительно «предварительно загрузить», используя любой другой элемент этого класса, не обязательно статическое поле.

2

Номер

Статические инициализаторы выполняются, когда класс впервые загружен.

Java Runtime не делает все возможное, чтобы инициализировать каждый класс, как только вы запустите программу; это было бы очень плохой идеей.

+0

Как мне обойти это? – Acidic

+0

Вы не можете, AFAIK. Вы должны явно загрузить класс в свой код. – SLaks

+0

Но некоторые из моих классов, которые содержат такие статические члены, не могут быть созданы без определенной информации, доступной только тогда, когда программа уже запущена. – Acidic

2

что вы можете сделать, это создать метод статического загрузчика и включить его во время вашего метода инициализации.

1

Как уже упоминалось, статика инициализируется при первом загрузке класса.

Одним из способов заставить это было бы либо создать экземпляр рассматриваемого класса, либо создать (программу) отдельный (новый) класс, содержащий статику, и создать экземпляр, как только начнется программа. Тем не менее, я не уверен, что рекомендовал бы любую практику, поскольку они связывают память, которая может быть лучше использована в других местах.

Смежные вопросы