web-dev-qa-db-fra.com

Bloc statique dans Java

Je regardais un code l'autre jour et je suis tombé sur:

static {
    ...
}

Venant de C++, je ne savais pas pourquoi c'était là. Ce n'est pas une erreur car le code compilé est bien. Qu'est-ce que ce bloc de code "statique"?

303
Mohit Deshpande

C'est un initialiseur statique . Il est exécuté lorsque la classe est chargée (ou initialisée, pour être précis, mais vous ne remarquez généralement pas la différence).

Cela peut être considéré comme un "constructeur de classe" .

Notez qu'il existe également initialiseurs d'instance , qui se ressemblent, sauf qu'ils ne possèdent pas le mot clé static. Ceux-ci sont exécutés en plus de le code dans le constructeur lors de la création d'une nouvelle instance de l'objet.

337
Joachim Sauer

C'est un initialiseur statique. Il est exécuté lorsque la classe est chargée et constitue un bon emplacement pour l'initialisation des variables statiques.

De http://Java.Sun.com/docs/books/tutorial/Java/javaOO/initial.html

Une classe peut avoir un nombre quelconque de blocs d'initialisation statiques et peut apparaître n'importe où dans le corps de la classe. Le système d'exécution garantit que les blocs d'initialisation statiques sont appelés dans l'ordre dans lequel ils apparaissent dans le code source.

Si vous avez une classe avec une carte de recherche statique, elle pourrait ressembler à ceci:

class MyClass {
    static Map<Double, String> labels;
    static {
        labels = new HashMap<Double, String>();
        labels.put(5.5, "five and a half");
        labels.put(7.1, "seven point 1");
    }
    //...
}

C'est utile car le champ statique ci-dessus n'a pas pu être initialisé avec labels = .... Il doit en quelque sorte appeler la méthode put.

93
aioobe

C'est un bloc de code qui est exécuté lorsque la classe est chargée par un chargeur de classes. Il est destiné à initialiser les membres statiques de la classe.

Il est également possible d'écrire des initialiseurs non statiques, ce qui est encore plus étrange:

public class Foo {
    {
        // This code will be executed before every constructor
        // but after the call to super()
    }

    Foo() {

    }
}
70
Simon Lehmann

Le bloc statique peut être utilisé pour montrer qu'un programme peut aussi être exécuté sans fonction principale.

//static block
//static block is used to initlize static data member of the clas at the time of clas loading
//static block is exeuted before the main
class B
{
    static
    {
        System.out.println("Welcome to Java"); 
        System.exit(0); 
    }
}
16
user3777803

Un bloc statique s'exécute une fois dans le cycle de vie d'un programme. Une autre propriété du bloc statique est qu'il s'exécute avant la méthode principale.

6
Zahid Hussain

Les blocs statiques sont utilisés pour initialiser le code et seront exécutés lors du chargement de la classe par la machine virtuelle. Consultez le lien ci-dessous qui donne une explication détaillée. http://www.jusfortechies.com/Java/core-Java/static-blocks.php

3
sarath galimelu