Preface
As Java developers, we create a large number of objects every day, but we always use management dependency systems (such as Spring frameworks) to create these objects. In fact, there are other ways to create objects, which I will introduce in detail in the following article.
1. Use new keywords
This is the most common way to create objects, and it is also very simple. By using this method we can call any constructor we need to call.
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
2. Use the newInstance method of class class
We can also use the newInstance method of the class class to create objects. This newInstance method calls the parameterless constructor to create an object.
We can create objects using newInstance() in the following way:
Employee emp2 = (Employee) Class.forName("org.programming.mitra.exercises.Employee").newInstance();or
Employee emp2 = Employee.class.newInstance();51: invokevirtual #70 // Method java/lang/Class.newInstance:()Ljava/lang/Object;
3. Use the newInstance method of the constructor class
Similar to the newInstance method using the class class, there is a newInstance() function method in the java.lang.reflect.Constructor class that can be used to create objects. By using this newInstance method, we can also call parameterized constructors and private constructors.
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;
These newInstance() methods are considered as reflection means to create objects. In fact, newInstance() method of the inner class uses newInstance() method of the constructor class. This is why the latter is preferred and uses different frameworks such as Spring, Hibernate, Struts , etc.
4. Use the clone method
In fact, whenever we call the clone method, the JAVA virtual machine creates a new object for us and copies the contents of the previous object into this new object. Creating an object using clone method does not call any constructors.
In order to use the clone() method in an object, we need to implement the cloneable type and define the clone method.
Employee emp4 = (Employee) emp3.clone();162: invokevirtual #87 // Method org/programming/mitra/exercises/Employee.clone ()Ljava/lang/Object;
5. Use deserialization
Whenever we serialize and deserialize an object, the JAVA virtual machine creates a separate object for us. In deserialization, the JAVA virtual machine does not use any constructor to create objects.
Serializing an object requires us to implement a serializable interface in the class.
ObjectInputStream in = new ObjectInputStream(new FileInputStream("data.obj"));Employee emp5 = (Employee) in.readObject();261: invokevirtual #118 // Method java/io/ObjectInputStream.readObject:()Ljava/lang/Object; As we can see in the above byte code snippet, except for the first one being converted to a new function and an invokespecial instruction, all 4 methods are called and converted to invokevirtual .
Example
Let's take a look at the Employee class that is ready to create an object:
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; }} In the following Java program, we use 5 ways to create Employee objects.
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'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'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()); }}The output results of this program are as follows:
Employee Constructor Called...Employee [name=Naresh], hashcode : -1968815046Employee Constructor Called...Employee [name=Rishi], hashcode : 78970652Employee Constructor Called...Employee [name=Yogesh], hashcode : -1641292792Employee [name=Atul], hashcode : 2051657Employee [name=Akash], hashcode : 63313419
The above content is about 5 different methods for creating objects in Java. I hope it will be helpful for you to learn Java. Thank you for your support to Wulin.com.