Дополнительно
В Java - Final переменные можно инициализировать в статическом блоке инициализации?
На основании моего понимания языка программирования Java, статические переменные можно инициализировать в статическом блоке инициализации.
Однако, когда я пытаюсь реализовать это на практике (статический
переменные окончательной
тоже), я получаю сообщение об ошибке показано на скриншоте ниже:
44
4
Да конечно: переменных статические заключительные можно инициализировать в статическом блоке но.... у вас в этом примере подразумевается Гото (
попробовать/поймать
в основном 'Гото поймать, если случается что-то плохое').Если исключение выдается вашим "конечным" переменные будут инициализированы.
Обратите внимание, что использование статических конструкций противоречит объектно-ориентированного догма. Это может осложнить ваше тестирование и отладка сложнее.
Вы можете сделать это, но вы должны выйти из статического блока, выдавая исключение - вы можете повторно сгенерировать исключение, что был пойман или новый. Как правило, это исключение должно быть к RuntimeException
. Вы действительно не должны поймать универсального "исключение", но более конкретных исключений(ы), которые могут быть созданы из вашего "попробовать" блока. Наконец, если статический инициализатор вызывает исключение, то это окажет класса в негодность в течение этого конкретного бежать, потому что JVM будет только попытка инициализации класса. Последующие попытки использовать этот класс в результате другого исключения, такие как
ошибке типа noclassdeffounderror`.Так, для работы, ваш инициализатор должен читать что-то вроде этого:
Предполагая, что
InitializationFailedException
обычайк RuntimeException
, но вы можете использовать уже существующий.Если нет, откуда он в состоянии поймать или ExceptionInInitializationError или вообще исключение тогда программа никогда не должны пытаться использовать аргумент myVar. Однако, если те попадутся и программа не'т конец, тогда нужно код смотреть и ручки аргумент myVar равенство нулю (или быть счастливым с
возникновению исключительных ситуаций типа NullPointerException
выходит за все).Я'м не уверен, что есть хороший способ справиться с этим.
Вы можете поместить объявление в блоке finally?