Préface
En tant que développeurs Java, nous créons un grand nombre d'objets chaque jour, mais nous utilisons toujours des systèmes de dépendance de gestion (tels que les cadres de printemps) pour créer ces objets. En fait, il existe d'autres moyens de créer des objets, que je présenterai en détail dans l'article suivant.
1. Utilisez de nouveaux mots clés
C'est le moyen le plus courant de créer des objets, et il est également très simple. En utilisant cette méthode, nous pouvons appeler n'importe quel constructeur que nous devons appeler.
Employé EMP1 = nouvel employé (); 0: Nouveau # 19 // Classe Org / Programmation / Mitra / Exercices / Employé 3: DUP 4: InvokeSpecial # 21 // Méthode org / Programming / Mitra / Exercises / Employee. "" :() V
2. Utilisez la méthode de classe NewInstance de la classe
Nous pouvons également utiliser la méthode NewInstance de la classe de classe pour créer des objets. Cette méthode NewInstance appelle le constructeur sans paramètre pour créer un objet.
Nous pouvons créer des objets à l'aide de NewInstance () de la manière suivante:
Employee Emp2 = (Employee) class.forname ("org.programming.mitra.exercistes.employee"). NewInstance ();ou
Employee EMP2 = employee.class.newinstance (); 51: invokevirtual # 70 // méthode java / lang / class.newinstance :() ljava / lang / objet;
3. Utilisez la méthode NewInstance de la classe de constructeur
Semblable à la méthode newInstance utilisant la classe de classe, il existe une méthode de fonction newInstance() dans la classe java.lang.reflect.Constructor qui peut être utilisée pour créer des objets. En utilisant cette méthode newInstance , nous pouvons également appeler des constructeurs paramétrés et des constructeurs privés.
Constructor <Lesyee> Constructor = Employee.Class.getConstructor (); Employee EMP3 = Constructor.NewInstance (); 111: invokeVirtual # 80 // Method Java / Lang / Reflect / Constructor.Newinstance: ([Ljava / Lang / Object;) Ljava / Lang / Object;
Ces méthodes newInstance() sont considérées comme des moyens de réflexion pour créer des objets. En fait, newInstance() de la classe intérieure utilise newInstance() de la classe de constructeur. C'est pourquoi ce dernier est préféré et utilise différents cadres tels que Spring, Hibernate, Struts , etc.
4. Utilisez la méthode du clone
En fait, chaque fois que nous appelons la méthode clone , la machine virtuelle Java crée un nouvel objet pour nous et copie le contenu de l'objet précédent dans ce nouvel objet. La création d'un objet utilisant clone n'appelle aucun constructeur.
Afin d'utiliser la méthode clone() dans un objet, nous devons implémenter le type clonable et définir la méthode Clone.
Employé EMP4 = (employé) EMP3.Clone (); 162: Invokevirtual # 87 // Méthode org / programmation / mitra / exercices / employee.clone () ljava / lang / objet;
5. Utiliser la désérialisation
Chaque fois que nous sérialisons et désérialisons un objet, la machine virtuelle Java crée un objet séparé pour nous. Dans la désérialisation, la machine virtuelle Java n'utilise aucun constructeur pour créer des objets.
Sérialisation d'un objet nous oblige à implémenter une interface sérialisable dans la classe.
ObjectInputStream dans = new ObjectInputStream (new FileInputStream ("data.obj")); employee Emp5 = (employé) dans.readObject (); 261: invokevirtual # 118 // Method Java / io / ObjectInputStream.readObject :() ljava / lang / objet; Comme nous pouvons le voir dans l'extrait de code d'octet ci-dessus, à l'exception de la première étant convertie en une nouvelle fonction et une instruction invokespecial , les 4 méthodes sont appelées et converties en invokevirtual .
Exemple
Jetons un coup d'œil à la classe Employee prêts à créer un objet:
Employé de classe implémente clonable, sérialisable {private statique final long SerialVersionUID = 1l; nom de chaîne privé; Employé public () {System.out.println ("Constructeur d'employee appelé ..."); } public String getName () {Nom de retour; } public void setName (string name) {this.name = name; } @Override public int hashcode () {final int prime = 31; Int résultat = 1; result = prime * result + ((name == null)? 0: name.hashcode ()); Résultat de retour; } @Override public boolean equals (objet obj) {if (this == obj) return true; if (obj == null) return false; if (getClass ()! = obj.getClass ()) return false; Employé autre = (employé) obj; if (name == null) {if (autre.name! = null) return false; } else if (! name.equals (autre.name)) renvoie false; Retour Vrai; } @Override public String toString () {return "Employee [name =" + name + "]"; } @Override public objet clone () {objet obj = null; essayez {obj = super.clone (); } catch (clonenotsupportEdException e) {e.printStackTrace (); } return obj; }} Dans le programme Java suivant, nous utilisons 5 façons de créer des objets Employee .
classe publique ObjectCreation {public static void main (String ... args) lève une exception {// en utilisant un nouvel mot-clé Employee Emp1 = New Employee (); emp1.setName ("naresh"); System.out.println (EMP1 + ", HashCode:" + emp1.hashcode ()); // en utilisant la méthode NewInstance () de la classe Classe () Employee Emp2 = (Employee) class.forname ("org.programming.mitra.exercises.employee") .newinstance (); // ou nous pouvons simplement faire cela // employee emp2 = employee.class.newinstance (); Emp2.SetName ("Rishi"); System.out.println (EMP2 + ", HashCode:" + emp2.HashCode ()); // en utilisant la méthode de la classe Constructor Classe () Constructeur de méthode <Lesseyee> Constructor = Employee.Class.getConstructor (); Employee EMP3 = Constructor.NewInstance (); emp3.setName ("yogesh"); System.out.println (EMP3 + ", HashCode:" + emp3.hashcode ()); // En utilisant Clone () Méthode Employee Emp4 = (Employee) EMP3.Clone (); EMP4.SetName ("Atul"); System.out.println (EMP4 + ", HashCode:" + emp4.hashcode ()); // en utilisant Deserialization // Serialization ObjectOutputStream out = new ObjectOutputStream (new FileOutputStream ("data.obj")); out.writeObject (EMP4); out.close (); // Deserialization ObjectInputStream dans = new ObjectInputStream (new FileInputStream ("data.obj")); Employé EMP5 = (employé) dans.readObject (); joindre(); Emp5.SetName ("Akash"); System.out.println (EMP5 + ", HashCode:" + emp5.hashcode ()); }}Les résultats de sortie de ce programme sont les suivants:
Constructeur d'employee appelé ... Employee [name = naresh], HashCode: -196815046Employee Constructeur appelé ... Employee [Name = Rishi], Hashcode: 78970652 Employee Constructeur appelé ... Employeeeee [Name = at aTUL], -1641292792EMPLOYEEE [NAM [Name = Akash], HashCode: 63313419
Le contenu ci-dessus est d'environ 5 méthodes différentes pour créer des objets en Java. J'espère qu'il vous sera utile d'apprendre Java. Merci pour votre soutien à wulin.com.