Puede crearlo dentro de una función estática, siempre que detecte la excepción que (potencialmente) plantea.
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;
}
}
}
No hay manera de permitir que la excepción se propague, ya que plantea una excepción comprobada (y que es ilegal durante la inicialización). Hay un par de maneras de lidiar con eso:
lanzar una excepción sin control: Esto provoca una java.lang.ExceptionInInitializerError
para obtener plantearon cuando se intenta cargar la clase. Puede ser confuso y difícil de rastrear y depurar. No lo recomiendo
cambio en una variable no final, y crear una función para acceder a ella: Si no final de la variable, se puede comprobar si está configurado en el GET, y elevar la excepción comprobada, si no lo es. Esto permite (de hecho, requiere) su código para manejar la excepción en el punto donde se llama:
public class MyClass {
private static Setter setter;
protected static synchronized Setter getSetter() raises FileNotFoundException {
if setter == null {
setter = new Setter();
}
return setter;
}
}
En general, si algo arroja una excepción marcada, no es algo que desee almacenar en forma estática. –