5 formas de crear objetos en Java

Documento fuente: https://www.cnblogs.com/wxd0108/p/5685817.html

5 formas de crear objetos en Java

  • new crea un nuevo objeto
  • Mediante mecanismo de reflexión (Clase y Constructor)
  • Usando el mecanismo de clonación
  • a través del mecanismo de serialización

new crea un nuevo objeto

Esta es la forma más común y fácil de crear objetos. De esta forma, podemos llamar a constructores arbitrarios (tanto sin argumentos como con argumentos).

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

a través del mecanismo de reflexión

  1. Usa el método newInstance de la clase Class

    También podemos crear objetos utilizando el método newInstance de la clase Class. El método newInstance llama al constructor sin parámetros para crear el objeto.

    Podemos crear un objeto llamando al método newInstance de las siguientes maneras:

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;
  1. Usa el método newInstance de la clase Constructor

    Al igual que el método newInstance de la clase Class, la clase java.lang.reflect.Constructor también tiene un método newInstance para crear objetos. Podemos llamar a constructores parametrizados y privados a través de este método newInstance.

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;

Estos dos métodos newInstance son lo que llamamos reflexión. De hecho, el método newInstance de Class llama internamente al método newInstance de Constructor. Es por eso que muchos marcos, como Spring, Hibernate, Struts, etc., usan este último.

Usando el mecanismo de clonación

Cada vez que llamamos al método de clonación de un objeto, jvm creará un nuevo objeto y copiará todo el contenido del objeto anterior en él. La creación de un objeto con el método de clonación no llama a ningún constructor.

Para usar el método de clonación, primero debemos implementar la interfaz Cloneable e implementar el método de clonación definido por ella.

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

a través del mecanismo de serialización

Cuando serializamos y deserializamos un objeto, jvm crea un objeto separado para nosotros. Al deserializar, jvm crea el objeto y no llama a ningún constructor.
Para deserializar un objeto, necesitamos hacer que nuestra clase implemente la interfaz Serializable

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

Como podemos ver en el fragmento de código de bytes anterior, a excepción del primer método, los otros 4 métodos se transforman en invocarvirtual (el método directo para crear un objeto), y el primer método se transforma en dos llamadas, nueva e invocar especial (la transferencia de constructor).

Supongo que te gusta

Origin blog.csdn.net/qq_38338409/article/details/119518833
Recomendado
Clasificación