Bonjour,
quelle sont les differents possibilité (en java) pour instancier un objet par exemple un objet de la classe JButton ou la classe String.
merci pour la réponse
A+![]()
Bonjour,
quelle sont les differents possibilité (en java) pour instancier un objet par exemple un objet de la classe JButton ou la classe String.
merci pour la réponse
A+![]()
Ça c'est de la question vague ..
Cf. JButton, String
Code : Sélectionner tout - Visualiser dans une fenêtre à part JButton totoLeBouton = new JButton("Il faut prendre l'habitude de regarder la Javadoc"); // Par exemple ;)
Responsable Java de Developpez.com (Twitter et Facebook)
Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
--------
Architecte Solution
LinkedIn : https://www.linkedin.com/in/nicolascaudard/
Bonsoir,
Vague? Je dit que c'est plus que ça, l'instanciation d'un objet se trouve toujours sur la première partie d'un tutoriel Java.
Tu peux utiliser new, créer directement à partir de ses valeurs (ex: String, tableau, ...), utiliser la méthode forName de Class aussi.
Bref,![]()
A+.
J'attire votre attention sur la classe String. L'instanciation d'objets de cette classe et la gestion en mémoire de ceux-ci sont différentes de tout autre classe.
Un objet String est non modifiable (immuable). Je parle de l'objet et non pas de sa référence. Si vous allez consulter cette classe, vous verrez qu'elle est marquée "final".
Ce qui est équivalant à String s = new String("abc");
Code : Sélectionner tout - Visualiser dans une fenêtre à part String s = "abc";
Mais Java permet de raccourcir l'instanciation de cette classe.
Pour le moment nous avons 1 variable référence s et 1 objet String en mémoire ayant pour valeur "abc"
Nous avons maintenant 2 variables références s et s2 et toujours 1 objet en mémoire ayant pour valeur "abc".
Code : Sélectionner tout - Visualiser dans une fenêtre à part String s2 = s;
Pour le moment, il y a pas de différence avec l'instanciation d'objet de classe "classique".
Voyons l'étape suivante :
Comme l'objet String "abc" n'est pas modifiable, un autre objet String "abcdef" est créé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part s = s.concat("def");
Et les variables s et s2 ne font plus référence au même objet.
Nous avons maintenant 2 variables références s et s2 et 2 objets String, "abc" et "abcdef" là où une autre classe "classique" aurait modifié l'objet sans en créer un nouveau.
Pas tout-à-fait... Java fait un traitement particulier sur les chaînes littérales comme "abc" et les instancie au chargement des classes si besoin, oui...
Mais new String("abc") en instancie encore une autre. Ça fait deux chaînes et non pas une :
- la chaîne "abc" qui a été instanciée au chargement parce que c'est une chaîne littérale
- la chaîne qui a été instanciée par l'appel du constructeur new String().
Ce n'est pas équivalent, et ce n'est pas un raccourci. L'appel de new String() n'est pas utile, mais si on le fait, ça fait bel et bien quelque chose de nouveau.
Le final n'a aucun rapport avec l'immuabilité des String. Le final sur une classe indique juste que cette classe ne peut pas être héritée.
En faite il y a quand même un rapport. Si String pouvais être héritée, alors on pourrai écrire :
==> salut
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 String s1 = new StringPerso("hello") String s2 = s1; s2.replaceAll("hello", "salut");// replaceAll est redéfinie pour modifier le contenu du tableau de char représentant la chaine (private final char value[];). System.out.println(s1);
Bon il est possible de faire ce genre de "connerie" en utilisant la reflexion (setAccessible(true) sur le field value). Mais à partir du moment où on touche à ça, on doit savoir ce que l'on fait...
Partager