Prefacio
Como desarrolladores de Java, creamos una gran cantidad de objetos todos los días, pero siempre utilizamos sistemas de dependencia de gestión (como los marcos de primavera) para crear estos objetos. De hecho, hay otras formas de crear objetos, que introduciré en detalle en el siguiente artículo.
1. Use nuevas palabras clave
Esta es la forma más común de crear objetos, y también es muy simple. Al usar este método, podemos llamar a cualquier constructor al que deba llamar.
Empleado emp1 = nuevo empleado (); 0: nuevo #19 // clase org/programación/mitra/ejercicios/empleado 3: dup 4: invokespecial #21 // método org/programación/mitra/ejercicios/empleado "" :() v)
2. Use el método NewInstance de clase de clase
También podemos usar el método NewInstance de la clase de clase para crear objetos. Este método de NewInstance llama al constructor sin parámetros para crear un objeto.
Podemos crear objetos usando NewInstance () de la siguiente manera:
Empleado emp2 = (empleado) class.forname ("org.programming.mitra.exercises.employee"). NewInStance ();o
Empleado emp2 = empleado.class.newinstance (); 51: invokevirtual #70 // método java/lang/class.newinstance :() ljava/lang/object;
3. Use el método NewInstance de la clase de constructor
Similar al método newInstance usando la clase de clase, hay un método de función newInstance() en la clase java.lang.reflect.Constructor que se puede usar para crear objetos. Al usar este método de newInstance , también podemos llamar a constructores parametrizados y constructores privados.
Constructor <EplayeeS> Constructor = Employee.Class.getConstructor (); Empleado emp3 = constructor.newinstance (); 111: InvokeVirtual #80 // método java/lang/reflej/constructor.newinstance: ([lJava/lang/objeto;) Ljava/lang/objeto;
Estos métodos newInstance() se consideran como medios de reflexión para crear objetos. De hecho, newInstance() de la clase interna utiliza newInstance() de la clase Constructor. Es por eso que este último se prefiere y utiliza diferentes marcos como Spring, Hibernate, Struts , etc.
4. Use el método clon
De hecho, cada vez que llamamos al método clone , la máquina virtual Java crea un nuevo objeto para nosotros y copia el contenido del objeto anterior en este nuevo objeto. Crear un objeto utilizando clone no llama a ningún constructor.
Para usar el método clone() en un objeto, necesitamos implementar el tipo clonable y definir el método Clone.
Empleado Emp4 = (Empleado) emp3.clone (); 162: InvokeVirtual #87 // método org/programación/mitra/ejercicios/empleado.clone () ljava/lang/object;
5. Use la deserialización
Cada vez que serializamos y deserializamos un objeto, la máquina virtual Java crea un objeto separado para nosotros. En la deserialización, la máquina virtual Java no usa ningún constructor para crear objetos.
La serialización de un objeto requiere que implementemos una interfaz serializable en la clase.
ObjectInputStream in = new ObjectInputStream (new FileInputStream ("data.obj")); Employee Emp5 = (Employee) in.ReadObject (); 261: InvokeVirtual #118 // Método Java/IO/ObjectInputStream.ReadObject :() LJava/Lang/Object; Como podemos ver en el fragmento de código de byte anterior, excepto que el primero se convierte en una nueva función y una instrucción invokespecial , los 4 métodos se llaman y se convierten a invokevirtual .
Ejemplo
Echemos un vistazo a la clase Employee que está lista para crear un objeto:
El empleado de la clase implementa clonable, serializable {privado estático final Long SerialVersionUid = 1l; nombre de cadena privada; Public Employee () {System.out.println ("Constructor de empleados llamado ..."); } public String getName () {nombre de retorno; } public void setName (nombre de cadena) {this.name = name; } @Override public int hashcode () {final int prime = 31; int resultado = 1; resultado = prime * resultado + ((name == null)? 0: name.hashcode ()); resultado de retorno; } @Override public boolean iguales (objeto obj) {if (this == obj) return true; if (obj == null) return false; if (getClass ()! = obj.getClass ()) return false; Empleado otro = (empleado) obj; if (name == null) {if (other.name! = null) return false; } else if (! name.equals (other.name)) return false; devolver verdadero; } @Override public string toString () {return "empleado [name =" + name + "]"; } @Override Public Object clone () {object obj = null; intente {obj = super.clone (); } Catch (ClonenotsupportedException e) {E.PrintStackTrace (); } return obj; }} En el siguiente programa Java, utilizamos 5 formas de crear objetos Employee .
Public Class ObjectCreation {public static void main (String ... args) lanza la excepción {// utilizando la nueva palabra clave empleado empt1 = new Employee (); Emp1.setName ("Naresh"); System.out.println (emp1 + ", hashcode:" + emp1.hashcode ()); // utilizando el método NewInStance () Empleado de class de clase emp2 = (Empleado) Class.Forname ("org.programming.Mitra.Esexerces.Employee") .NewinStance (); // o simplemente podemos hacer esto // Employee Emp2 = Employee.class.newinstance (); Emp2.SetName ("Rishi"); System.out.println (emp2 + ", hashcode:" + emp2.hashcode ()); // mediante el método NewInStance () de la clase de constructor () Constructor <epaule> constructor = empleado.class.getConstructor (); Empleado emp3 = constructor.newinstance (); emp3.setName ("Yogesh"); System.out.println (emp3 + ", hashcode:" + emp3.hashcode ()); // mediante el método clone () empleado emp4 = (empleado) emp3.clone (); emp4.setName ("atul"); System.out.println (emp4 + ", hashcode:" + emp4.hashcode ()); // mediante la deserialización // serialization ObjectOutputStream out = new ObjectOutputStream (new FileOutputStream ("data.obj")); out.writeObject (Emp4); out.close (); // Deserialization ObjectInputStream in = new ObjectInputStream (new FileInputStream ("data.obj")); Empleado emp5 = (empleado) en.ReadObject (); cercar(); emp5.SetName ("Akash"); System.out.println (emp5 + ", hashcode:" + emp5.hashcode ()); }}Los resultados de salida de este programa son los siguientes:
Constructor de empleados llamado ... Empleado [name = naresh], hashcode: -1968815046 empleado constructor llamado ... empleado [name = rishi], hashcode: 78970652eMeployee Constructor llamado ... Empleado [name = yogesh], hashcode: -1641292792eMPloyee [name = Atul], Hashcode: 205165165165757575757 [nombre = akash], hashcode: 63313419
El contenido anterior es aproximadamente 5 métodos diferentes para crear objetos en Java. Espero que sea útil para usted aprender Java. Gracias por su apoyo a Wulin.com.