Вы можете создать его в статической функции, если только вы поймаете исключение, которое оно (потенциально) вызывает.
public class MyClass {
protected static final Setter setter = createSetter();
protected static Setter createSetter() {
try {
return new Setter();
} catch(FileNotFoundException e) {
// handle it appropriately
return null;
}
}
}
Нет способа разрешить распространение исключения, поскольку оно вызывает проверенное исключение (и это недопустимо во время инициализации). Есть несколько способов справиться с этим:
Вызовите непроверенное исключение : Это вызывает повышение значения java.lang.ExceptionInInitializerError
при попытке загрузить класс. Это может сбивать с толку, и трудно отследить и отладить. Я не рекомендую это.
Измените ее на нефинальную переменную и создайте функцию для доступа к ней : если переменная не является финальной, вы можете проверить, установлена ли она в get, и вызвать проверенный Исключение, если это не так. Это позволяет (действительно, требует) вашему коду обрабатывать исключение в точке, где оно вызывается:
public class MyClass {
private static Setter setter;
protected static synchronized Setter getSetter() raises FileNotFoundException {
if setter == null {
setter = new Setter();
}
return setter;
}
}