Instanciation dynamique

[Fermé]
Signaler
-
 sisi -
Bonjour tout le monde,

Mon problème est que je n'arrive pas a comprendre la différence entre une instanciation dynamique et une instanciation normale en utilisant le mot clé "new".

D'après ce que j'ai compris:

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(). je récupère le constructeur puis on invoque la méthode "tostring"
1. est ce que cette class dont je veux instancier dois êtres dans le même projet dont je travaille?
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?

SVP s'il y a quelqu'un qui peut m'aider.
Je vous remercie.



2 réponses

Messages postés
16372
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
23 juillet 2021
2 860
"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.

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.JPanel
Ce 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=]
exactement le meme que vous m'avez donné


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);
}
}
}

}
Messages postés
16372
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
23 juillet 2021
2 860
Donc il doit compiler normalement (si bien sûr il est enregistré dans un fichier Test.java)

Places toi dans un dossier de fichier personnels (sur ton bureau par exemple), et copies ton fichiers Test.java, et ensuite modifies ta ligne de commande pour compiler dans ton dossier.

C:\Users\Sisi\Desktop>"C:\Program Files\Java\jdk\bin\javac.exe" Test.java
Désolée KX mais apparement mon PC a un problème il refuse d'exécuter tous code. d'habitude je travaille avec eclipse alors j'utilise pas la ligne de commande. je vous remercie beaucoup pour tout vos effort vos réponse tres rapide et les chose sont tres claire pour moi
Messages postés
16372
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
23 juillet 2021
2 860
Rien ne t'empêche d'utiliser Eclipse si tu veux (sauf si bien sûr ton PC bug aussi pour Eclipse)

Remarque : si Eclipse fonctionne d'habitude, la commande javac devrait fonctionner partout !
Alors c'est juste le problème de mon PC, Merci
Messages postés
51
Date d'inscription
jeudi 25 octobre 2012
Statut
Membre
Dernière intervention
1 mai 2021
16
Merci beaucoup Bilbonbon, j'ai déjà lu ça et j'ai pas bien compris la différence, est ce que vous pouvez m'éclaircir un peux les choses.

Merci bcp.