Partage
  • Partager sur Facebook
  • Partager sur Twitter

"static{ }"...

On m'explique ?

Sujet résolu
    16 avril 2012 à 15:43:10

    Bonjour à tous,
    je viens ici parce que j'ai besoins de vous.
    Alors, je parcourais les sources d'un jeu quand je suis tombé sur une partie qui m'a tapée l'oeil.

    static
    {
        //Le code
    }
    


    Alors j'aimerai savoir, à quoi sert de faire une "fonction static" ?

    Ensuite je me pose une autre question : Il y a t'il un équivalent en C# de cette forme de code ?

    Cordialement, Sonorhio.
    • Partager sur Facebook
    • Partager sur Twitter
      16 avril 2012 à 15:48:35

      L'intérêt d'une fonction static est qu'elle peut être appelé sans avoir une instance de la classe , ca peut être utile dans un certain context. Il me semble que c'est exactement pareil en C#.
      • Partager sur Facebook
      • Partager sur Twitter
        16 avril 2012 à 15:49:01

        Salut,
        Une fonction STATIC appartient à la classe (et pas à l'objet).
        Elle peut être appelée même si tu n'as pas instancié d'objets.
        par exemple, dans la classe Integer, tu as une fonction STATIC qui est toString.
        tu peux très bien écrire:
        Integer.toString(125);

        • Partager sur Facebook
        • Partager sur Twitter
          16 avril 2012 à 15:54:12

          Merci de vos réponses,
          j'ai compris son intérêt, seulement en C# je n'arrive pas à trouver son équivalent.
          Or son utilisation me serais très utile. J'ai essaye de l'employer sous cette même forme mais il me sort une erreur.

          Une idée ?
          • Partager sur Facebook
          • Partager sur Twitter
            16 avril 2012 à 16:20:34

            Le fragment de code que tu donnes, c'est un constructeur statique. Le body sera appelé quand la classe est loadée par le classloader.

            Et voilà la doc pour le constructeur statique en C# : http://msdn.microsoft.com/en-us/librar [...] vs.80%29.aspx

            En gros :
            class SimpleClass
            {
                // Static constructor
                static SimpleClass()
                {
                    // Le code
                }
            }
            
            • Partager sur Facebook
            • Partager sur Twitter
              16 avril 2012 à 18:59:18

              Citation : Sonorhio

              Bonjour à tous,
              Alors, je parcourais les sources d'un jeu quand je suis tombé sur une partie qui m'a tapée l'oeil.

              static
              {
                  //Le code
              }
              




              ça c'est un initialiseur (ou initialisateur) static. Un bloc de code appelé avant le constructeur. Concrètement on peut s'en servir dans certaines situations comme par exemple remplir une collection ou initialiser un champ static final.

              Exemple :

              private static final int VAR;
              


              Soit tu choisis de l'initialiser directement:

              private static final int VAR = 10;
              


              ça fonctionne puisqu'il n'y a pas besoin de calcul compliqué ou de récupérer la valeur ailleurs mais imaginons que ce soit le cas. Pour initialiser une variable on se tourne vers le constructeur. Problème -> la variable est static final.

              private static final int VAR;
              
              //Constructeur
              public MonObject() {
                  Classe c = new Classe();
                  VAR = c.methode(); //Erreur.
              }
              


              heureusement les variables static final peuvent être initialisées dans un initialiseur static:

              private static final int VAR;
              static {
                  Classe c = new Classe();
                  VAR = c.methode();
              }
              


              Et voila. Je t'invite à te renseigner sur le mot clé final pour vraiment comprendre ;)
              • Partager sur Facebook
              • Partager sur Twitter

              "static{ }"...

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown