Initialisation des attributs

Associer des valeurs et créer des objets

Ce site ne sera plus alimenté de contenu après août 2014. Tous les nouveaux articles seront redigés pour www.waitingforcode.com

En PHP l'initialisation des attributs se basait soit sur l'appel du constructeur (__construct()), soit avec l'utilisation du symbole d'équation. En Java on a un choix plus large qui permet souvent de mieux ordonner le code.

Java admet l'initialisation des attributs des classes selon les méthodes suivantes :

  1. Signe d'équation

    Comme dans plusieurs autres langages, on peut utiliser le caractère d'équation (=) pour attribuer une valeur à une variable. On peut initialiser soit pour les champs primitifs (int, long, float, byte, short, double, char, boolean), soit pour les instances des classes.

    afficher le code

    A cote des valeurs des champs double et float vous remarquerez la présence des lettres "d" et "f". En fait, ce sont des indicateurs qui permettent à JVM de distinguer de quel type il s'agit. Si la lettre "f" était absente, le JVM traiterait la valeur 40.2 comme double. La compilation du code serait alors impossible à cause de l'exception suivante :

    ParamsInit.java:15: possible loss of precision
    found   eee: double
    required: float
      private float n = 40.2;
    
    

    Le traitement des tableaux (arrays) nécessite une autre initialisation. On remarque la présence des éléments compris dans le tableau entre deux crochets {}, séparés par un virgule. Si l'on veut initialiser un tableau multi-dimensionnel, il faut placer les crochets entre deux autre crochets.

  2. Les constructeurs

    La méthode standard d'initialisation peut être l'utilisation des constructeurs. Contrairement au PHP, le Java peut en avoir plusieurs. Le constructeur en Java doit porter le même nom que la classe pour laquelle il initialise des valeurs.

    afficher le code

    La classe TestInitConstructors possède trois constructeurs différents. La présence du this() est purement didactique. Elle sert à démontrer comment appeler un autre constructeur à l'intérieur du constructeur appelé.

  3. Les blocks d'initialisation

    Une fonctionnalité intéressante du Java en matière d'initialisation est ce qu'on appele initializer blocks (blocks d'initialisation). L'utilisation de ces constructeurs spécifiques est très conseillée pendant le traitement des attributs initialisés. On peut l'illustrer avec une situation où l'on a besoin de faire le calcul sur un chiffre avant de le rendre disponible pour l'application.

    afficher le code

    Si l'on fait des opérations sur les attributs statiques, on peut précéder l'acolade ouvrante du block par le mot static, comme dans l'exemple ci-dessous :

    import java.util.ArrayList;
    
    public class ParamsInit {
        public static void main(String[] args) {
            TestParams tp = new TestParams();
            TestBlocks tb = new TestBlocks();
            TestBlocksStatic tbs = new TestBlocksStatic();
            for (int j=0; j < tbs.i.size(); j++) {
              System.out.println(j + " value of tbs.i = " + tbs.i.get(j));
            }
        }
    }
    
    class TestBlocksStatic {
        public static ArrayList<Integer> i = new ArrayList<Integer>();
        static {
            i.add(50);
            i.add(62);
            i.add(74);
        }
    }
    

    Cependant à l'intérieur du block on ne pourra qu'accéder à des attributs statiques de la classe.

    Il existe aussi un autre type du block d'initialisation qu'on pourrait aussi traiter dans la partie "Constructeurs". Il s'agit d'un block qui ne concerne pas les attributs de la classe, mais la classe elle-même. Son écriture se présente de la manière suivante :

    import java.util.Random;
    
    public class ParamsInit {
        public static void main(String[] args) {
            TestClassBlockConstructor tcbc = new TestClassBlockConstructor();
        }
    }
    
    class TestClassBlockConstructor {
        private int from, to;
        {
            Random rand = new Random();
            from = rand.nextInt(599);
            to = from + 30;
        }
    
        public TestClassBlockConstructor() {
            System.out.println("from = " + from);
            System.out.println("to = " + to);
        }
    }
    
Bartosz KONIECZNY Standards du codage

Une question ? Une remarque ?

*

*

Un conseil Symfony1

Comment afficher le schéma du formulaire ?

Symfony 1.4 gérait déjà les formulaires avec une simplicité. Mais dans les situation de débuggage c'était très utile de voir leurs schémas. Pour ce faire, il suffisait d'utiliser :

print_r( $this->form->getWidgetSchema() );