Il est également utile lorsque vous ne souhaitez pas attribuer de la valeur à quelque chose, telles que le chargement de quelque classe qu'une seule fois au cours de l'exécution.
E. g.
static {
try {
Class.forName("com.example.jdbc.Driver");
} catch (ClassNotFoundException e) {
throw new ExceptionInInitializerError("Cannot load JDBC driver.", e);
}
}
Hey, il y a un autre avantage, vous pouvez l'utiliser pour gérer les exceptions. Imaginez qu' getStuff()
ici déclenche une Exception
qui vraiment fait dans un bloc catch:
private static Object stuff = getStuff(); // Won't compile: unhandled exception.
puis un static
initialiseur est utile ici. Vous pouvez gérer l'exception.
Un autre exemple est de faire des trucs par la suite ce qui ne peut pas être fait lors de l'attribution:
private static Properties config = new Properties();
static {
try {
config.load(Thread.currentThread().getClassLoader().getResourceAsStream("config.properties");
} catch (IOException e) {
throw new ExceptionInInitializerError("Cannot load properties file.", e);
}
}
Pour revenir sur le pilote JDBC exemple, que tout bon pilote JDBC permet également l'utilisation de l' static
initialiseur inscrire lui-même dans l' DriverManager
. Voir aussi cette et de cette réponse.