Вы можете сделать это, но вам нужно выйти из статического блока, выдав исключение - вы можете сбросить перехваченное исключение или новое. Обычно это исключение должно быть RuntimeException
. Вы действительно не должны ловить универсальные Exception
, но более конкретные исключения, которые могут быть выброшены из вашего блока try
. Наконец, если статический инициализатор генерирует исключение, то он делает класс непригодным для использования во время этого конкретного запуска, потому что JVM попытается инициализировать ваш класс только один раз. Последующие попытки использовать этот класс приведут к другому исключению, например NoClassDefFoundError
.
Итак, для работы ваш инициализатор должен прочитать что-то вроде этого:
static {
try {
...
} catch (Exception e) {
e.PrintStackTrace();
throw new InitializationFailedException("Could not init class.", e);
}
}
Предполагая, что InitializationFailedException
- это пользовательский RuntimeException
, но вы можете использовать существующий.