Je tiens à ajouter que les variables statiques et les initialisateurs statiques sont exécutés dans l'ordre d'apparition au moment du chargement de la classe. Ainsi, si votre initialisateur statique s'appuie sur une variable statique, celle-ci doit être initialisée avant le bloc statique en question, par ex.
final static String JDBC_DRIVER = getJdbcDriver( );
static
{
try
{
Class.forName(JDBC_DRIVER);
}
catch ( ClassNotFoundException exception )
{
log.error( "ClassNotFoundException " + exception.getMessage( ) );
}
}
Dans cet exemple getJdbcDriver
sera exécuté avant l'initialisateur statique. De plus, il peut y avoir plus d'un initialisateur statique dans la classe. Une fois de plus, ils sont exécutés dans l'ordre d'apparition.
Je tiens également à mentionner l'existence d'initialisateurs d'instance, qui surprennent lorsqu'on les voit pour la première fois. Ils ressemblent à un bloc de code à l'intérieur du corps de la classe, comme ceci.
class MyClass
{
final int intVar;
{
intVar = 1;
}
}
Dans le cas général, leur utilisation est quelque peu inutile, en raison du constructeur, mais ils sont utiles pour mettre en œuvre la version Java des fermetures.