A voir également:
- Instanciation dynamique java
- Tableau croisé dynamique - Guide
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel football - Télécharger - Jeux vidéo
- Waptrick jeux java itel ✓ - Forum Mobile
- Java apk - Télécharger - Langages
2 réponses
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
13 févr. 2013 à 14:40
13 févr. 2013 à 14:40
"dans l'instanciation dynamique je peux avoir les informations de ma classe (la liste des interfaces, des méthodes...etc) on utilisant la méthode getClass()"
Ce genre de manipulations, tu peux les faire tout le temps, la méthode getClass est définie dans la classe Object et est donc accessible par tous les objets.
L'instanciation dynamique n'a aucun rôle particulier dans ce processus.
"1. est ce que cette class dont je veux instancier dois êtres dans le même projet dont je travaille?"
Pas forcément, en utilisant des ClassLoader par exemple, on peux ajouter dynamiquement des classes, en lisant directement les fichiers .class
"2. si c'est la cas alors je peux utiliser le mot clé "new" pour l'instancier pourquoi je dois passer par l'instanciation dynamique?"
Justement, ce n'est pas le cas ! De plus, même si ta classe est quand même dans ton projet au départ, il y a certains cas où l'on ne connait pas à l'avance quelle classe il faut instancier, c'est donc impossible de faire une instanciation avec new.
Exemple, on instancie des objets dont le nom de la classe est passée en argument du programme.
Exemple, d'exécution :
Ce genre de manipulations, tu peux les faire tout le temps, la méthode getClass est définie dans la classe Object et est donc accessible par tous les objets.
L'instanciation dynamique n'a aucun rôle particulier dans ce processus.
"1. est ce que cette class dont je veux instancier dois êtres dans le même projet dont je travaille?"
Pas forcément, en utilisant des ClassLoader par exemple, on peux ajouter dynamiquement des classes, en lisant directement les fichiers .class
"2. si c'est la cas alors je peux utiliser le mot clé "new" pour l'instancier pourquoi je dois passer par l'instanciation dynamique?"
Justement, ce n'est pas le cas ! De plus, même si ta classe est quand même dans ton projet au départ, il y a certains cas où l'on ne connait pas à l'avance quelle classe il faut instancier, c'est donc impossible de faire une instanciation avec new.
Exemple, on instancie des objets dont le nom de la classe est passée en argument du programme.
public class Test { public static void main(String[] args) { System.out.println(args.length+" arguments"); for (int i=0; i<args.length; i++) { System.out.println("\nargument "+i+" : "+args[i]); try { Class<?> c = Class.forName(args[i]); Object obj = c.newInstance(); System.out.println("newInstance : "+obj); } catch (Exception e) { System.out.println(e); } } } }
Exemple, d'exécution :
java Test java.lang.String java.util.LinkedList javax.swing.JPanelCe qui donne :
3 arguments argument 0 : java.lang.String newInstance : argument 1 : java.util.LinkedList newInstance : [] argument 2 : javax.swing.JPanel newInstance : javax.swing.JPanel[,0,0,0x0,invalid,layout=java.awt.FlowLayout, alignmentX=0.0,alignmentY=0.0,border=,flags=9,maximumSize=,minimumSize=,preferredSize=]
13 févr. 2013 à 15:20
Pour l'exemple: est ce que le premier et le deuxième argument on ne peu pas les instancier?pourquoi il n'a rien affiché?
est ce que vous pouvez m'expliquer le résultats d'instance du troisième arguments
argument 2 : javax.swing.JPanel
newInstance : javax.swing.JPanel[,0,0,0x0,invalid,layout=java.awt.FlowLayout, alignmentX=0.0,alignmentY=0.0,border=,flags=9,maximumSize=,minimumSize=,preferredSize=]
Merci infiniment
13 févr. 2013 à 15:53
On pourrait tous les 3 les instancier, si on s'avait À L'AVANCE quel serait leurs valeurs.
Mais dans la mesure où c'est l'utilisateur qui détermine quelle classe il va mettre en argument, on ne peut pas le coder en direct, car ça changera à chaque fois.
Comme exemple, j'avais pris "java Test java.lang.String java.util.LinkedList javax.swing.JPanel"
Mais on pourrait mettre n'importe quoi à la place, et c'est pour ça que l'on ne pourrait pas les remplacer dans le code. Faire un "new String" à la place de la première instanciation dynamique n'aurait plus aucun sens si ensuite je fait : "java Test java.util.Date Test java.util.TreeSet"
"pourquoi il n'a rien affiché? est ce que vous pouvez m'expliquer le résultats d'instance du troisième arguments"
Le println utilise la méthode toString de l'objet à afficher. Or pour le premier argument, la valeur était un String "", donc le programme a affiché "", c'est pour ça que l'on ne voit rien. De même pour la liste, par défaut elle est vide, donc on affiche seulement "[]".
Pour le troisième argument, c'est pareil, on utilise la méthode toString de l'objet à afficher, ici c'est un JPanel, donc c'est la méthode toString de la classe JPanel qui est utilisé, et on se retrouve avec un affichage spécifique aux JComponent, qui décrit dans l'ordre : le nom du JPanel (par défaut ""), les positions x et y (par défaut 0), les dimensions width et height (par défaut 0x0), etc.