Heim  >  Artikel  >  Java  >  So erstellen Sie Objekte in Java

So erstellen Sie Objekte in Java

青灯夜游
青灯夜游Original
2021-04-25 14:44:0926514Durchsuche

So erstellen Sie ein Objekt in Java: 1. Verwenden Sie das Schlüsselwort new. 2. Verwenden Sie die newInstance-Methode der Class-Klasse, die den parameterlosen Konstruktor aufrufen kann, um ein Objekt zu erstellen. 3. Verwenden Sie die newInstance-Methode der Constructor-Klasse. 4. Verwenden Sie die Klonmethode 5 und verwenden Sie Deserialisierung.

So erstellen Sie Objekte in Java

Die Betriebsumgebung dieses Tutorials: Windows7-System, Java8-Version, DELL G3-Computer.

Als Java-Entwickler erstellen wir jeden Tag viele Objekte, verwenden jedoch normalerweise Abhängigkeitsmanagementsysteme wie Spring, um Objekte zu erstellen. Es gibt jedoch viele Möglichkeiten, Objekte zu erstellen, die wir in diesem Artikel kennenlernen werden.

Es gibt 5 Möglichkeiten, Objekte in Java zu erstellen. Nachfolgend finden Sie Beispiele und Bytecodes. Verwenden Sie das Schlüsselwort new. → Der Konstruktor wurde aufgerufen

Mit der newInstance-Methode der Constructor-Klasse} → Der Konstruktor wurde aufgerufenMit der Klonmethode} → Der Konstruktor wurde nicht aufgerufenMit Deserialisierungsänderung } → Der Konstruktor wird nicht aufgerufen 1. Verwenden Sie das neue SchlüsselwortDies ist die gebräuchlichste und einfachste Möglichkeit, Objekte zu erstellen. Auf diese Weise können wir jeden Konstruktor (parameterlos und parametrisiert) aufrufen. 2. Verwenden Sie die newInstance-Methode der Class-Klasse
Wenn Sie das Programm am Ende ausführen, werden Sie feststellen, dass die Methoden 1, 2 und 3 den Konstruktor zum Erstellen von Objekten verwenden und die Methoden 4 und 5 den Konstruktor nicht aufrufen .
Employee emp1 = new Employee();
0: new           #19          // class org/programming/mitra/exercises/Employee
3: dup
4: invokespecial #21          // Method org/programming/mitra/exercises/Employee."":()V

Wir können auch die newInstance-Methode der Class-Klasse verwenden, um Objekte zu erstellen. Diese newInstance-Methode ruft den parameterlosen Konstruktor auf, um das Objekt zu erstellen.

Wir können Objekte erstellen, indem wir die newInstance-Methode auf folgende Weise aufrufen:

Employee emp2 = (Employee) Class.forName("org.programming.mitra.exercises.Employee").newInstance();
或者

Employee emp2 = Employee.class.newInstance();
51: invokevirtual    #70    // Method java/lang/Class.newInstance:()Ljava/lang/Object;
3. Verwenden Sie die newInstance-Methode der Constructor-Klasse. Sie ist der newInstance-Methode der Class-Klasse sehr ähnlich newInstance-Methode in der Klasse java.lang.reflect.Constructor Objekte können erstellt werden. Über diese newInstance-Methode können wir parametrisierte und private Konstruktoren aufrufen.

Constructor<Employee> constructor = Employee.class.getConstructor();
Employee emp3 = constructor.newInstance();
111: invokevirtual  #80  // Method java/lang/reflect/Constructor.newInstance:([Ljava/lang/Object;)Ljava/lang/Object;

Diese beiden neuen Instanzmethoden werden von allen als Reflexion bezeichnet. Tatsächlich ruft die newInstance-Methode von Class intern die newInstance-Methode von Constructor auf. Dies ist auch der Grund, warum viele Frameworks wie Spring, Hibernate, Struts usw. Letzteres verwenden. Um den Unterschied zwischen den beiden newInstance-Methoden zu verstehen, lesen Sie bitte diesen Artikel Erstellen von Objekten durch Reflection in Java mit Beispiel.

4 Verwenden der Klonmethode

Immer wenn wir die Klonmethode eines Objekts aufrufen, erstellt der JVM eines Kopieren Sie für ein neues Objekt den gesamten Inhalt des vorherigen Objekts hinein. Beim Erstellen eines Objekts mit der Klonmethode wird kein Konstruktor aufgerufen.

Um die Klonmethode verwenden zu können, müssen wir zunächst die Cloneable-Schnittstelle und die darin definierte Klonmethode implementieren.

Employee emp4 = (Employee) emp3.clone();
162: invokevirtual #87  // Method org/programming/mitra/exercises/Employee.clone ()Ljava/lang/Object;

5. Deserialisierung verwenden

Wenn wir ein Objekt serialisieren und deserialisieren, erstellt JVM ein separates Objekt für uns. Während der Deserialisierung erstellt der JVM das Objekt und ruft keinen Konstruktor auf.

Um ein Objekt zu deserialisieren, müssen wir unsere Klasse dazu bringen, die Serializable-Schnittstelle zu implementieren ), verwandelt sich die erste Methode in zwei Aufrufe, new und invokespecial (Konstruktoraufruf).

Beispiel

Lassen Sie uns einen Blick auf die Erstellung von Objekten für die folgende Employee-Klasse werfen:

ObjectInputStream in = new ObjectInputStream(new FileInputStream("data.obj"));
Employee emp5 = (Employee) in.readObject();
261: invokevirtual  #118   // Method java/io/ObjectInputStream.readObject:()Ljava/lang/Object;

Im folgenden Java-Programm erstellen wir Employee-Objekte auf fünf Arten. Den Code finden Sie auf GitHub.

class Employee implements Cloneable, Serializable {
    private static final long serialVersionUID = 1L;
    private String name;
    public Employee() {
        System.out.println("Employee Constructor Called...");
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((name == null) ? 0 : name.hashCode());
        return result;
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Employee other = (Employee) obj;
        if (name == null) {
            if (other.name != null)
                return false;
        } else if (!name.equals(other.name))
            return false;
        return true;
    }
    @Override
    public String toString() {
        return "Employee [name=" + name + "]";
    }
    @Override
    public Object clone() {
        Object obj = null;
        try {
            obj = super.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return obj;
    }
}

Das Programm gibt Folgendes aus:

public class ObjectCreation {
    public static void main(String... args) throws Exception {
        // By using new keyword
        Employee emp1 = new Employee();
        emp1.setName("Naresh");
        System.out.println(emp1 + ", hashcode : " + emp1.hashCode());
        // By using Class class&#39;s newInstance() method
        Employee emp2 = (Employee) Class.forName("org.programming.mitra.exercises.Employee")
                               .newInstance();
        // Or we can simply do this
        // Employee emp2 = Employee.class.newInstance();
        emp2.setName("Rishi");
        System.out.println(emp2 + ", hashcode : " + emp2.hashCode());
        // By using Constructor class&#39;s newInstance() method
        Constructor<Employee> constructor = Employee.class.getConstructor();
        Employee emp3 = constructor.newInstance();
        emp3.setName("Yogesh");
        System.out.println(emp3 + ", hashcode : " + emp3.hashCode());
        // By using clone() method
        Employee emp4 = (Employee) emp3.clone();
        emp4.setName("Atul");
        System.out.println(emp4 + ", hashcode : " + emp4.hashCode());
        // By using Deserialization
        // Serialization
        ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("data.obj"));
        out.writeObject(emp4);
        out.close();
        //Deserialization
        ObjectInputStream in = new ObjectInputStream(new FileInputStream("data.obj"));
        Employee emp5 = (Employee) in.readObject();
        in.close();
        emp5.setName("Akash");
        System.out.println(emp5 + ", hashcode : " + emp5.hashCode());
    }
}
Empfohlene verwandte Video-Tutorials: Java-Video-Tutorial

Das obige ist der detaillierte Inhalt vonSo erstellen Sie Objekte in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn