五种方法创建 Java 对象,你知道几种呢?
点击上方蓝色“程序猿DD”,选择“设为星标”
回复“资源”获取独家整理的学习资料!
Java
开发人员,我们通常每天都会创建许多对象,但是我们总是使用新的或依赖管理系统(例如Spring
)来创建这些对象。但是,有更多方法可以创建本文中将要研究的对象。Spring BeanFactory
。1、使用新关键字
Employee emp1 = new Employee();
2.使用Class类的newInstance()方法
Class
类的newInstance()
方法创建一个对象。此newInstance()
方法调用no-arg
构造函数来创建对象。newInstance()
通过以下方式创建对象:Employee emp2 = (Employee) Class.forName("org.programming.mitra.exercises.Employee").newInstance();
Employee emp2 = Employee.class.newInstance();
3.使用构造方法类的newInstance()方法
Class类的newInstance()
方法类似,java.lang.reflect.Constructor
类中有一个newInstance()
方法可用于创建对象。我们还可以使用此newInstance()
方法来调用参数化构造函数和私有构造函数。Constructor constructor = Employee.class.getConstructor();
Employee emp3 = constructor.newInstance();
newInstance()
方法都被称为创建对象的反射方式。实际上,Class
类的newInstance()
方法在内部使用了Constructor
类的newInstance()
方法。这就是为什么最好使用后一种方法,并且也将其用于诸如Spring
,Hibernate,Struts等不同框架的原因。要了解这两种newInstance()方法之间的区别,请阅读使用Example在Java中通过Reflection创建对象。4.使用clone()方法:
clone()
时,JVM实际上都会为我们创建一个新对象,并将先前对象的所有内容复制到其中。使用clone
方法创建对象不会调用任何构造函数。clone()
方法,我们需要实现Cloneable
并在其中定义clone()
方法。Employee emp4 = (Employee) emp3.clone();
5.使用反序列化
ObjectInputStream in = new ObjectInputStream(new FileInputStream("data.obj"));
Employee emp5 = (Employee) in.readObject();
Employee
类: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 boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Employee employee = (Employee) o;
return Objects.equals(name, employee.name);
}
@Override
public int hashCode() { return Objects.hash(name); }
@Override
public String toString() { return String.format("Employee{name='%s'}", name); }
@Override
public Object clone() {
Object obj = null;
try {
obj = super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return obj;
}
}
public class ObjectCreation {
public static void main(String... args) throws Exception {
// 1. Using new keyword
Employee emp1 = new Employee();
emp1.setName("emp1");
// 2. Using Class class's newInstance() method
Employee emp2 = Employee.class.newInstance();
emp2.setName("emp2");
// 3. Using Constructor class's newInstance() method
Constructorconstructor = Employee.class.getConstructor();
Employee emp3 = constructor.newInstance();
emp3.setName("emp3");
// 4. Using clone() method
Employee emp4 = (Employee) emp3.clone();
emp4.setName("emp4");
// Serialization
try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("data.obj"))) {
out.writeObject(emp4);
}
// 5. Using Deserialization
Employee emp5;
try (ObjectInputStream in = new ObjectInputStream(new FileInputStream("data.obj"))) {
emp5 = (Employee) in.readObject();
emp5.setName("emp5");
}
System.out.println(emp1 + ", hashcode : " + emp1.hashCode());
System.out.println(emp2 + ", hashcode : " + emp2.hashCode());
System.out.println(emp3 + ", hashcode : " + emp3.hashCode());
System.out.println(emp4 + ", hashcode : " + emp4.hashCode());
System.out.println(emp5 + ", hashcode : " + emp5.hashCode());
}
}
Employee Constructor Called...
Employee Constructor Called...
Employee Constructor Called...
Employee{name='emp1'}, hashcode : 3117192
Employee{name='emp2'}, hashcode : 3117193
Employee{name='emp3'}, hashcode : 3117194
Employee{name='emp4'}, hashcode : 3117195
Employee{name='emp5'}, hashcode : 3117196
往期推荐
扫一扫,关注我
一起学习,一起进步
每周赠书,福利不断
﹀
﹀
﹀
深度内容
推荐加入
最近热门内容回顾 #技术人系列
评论