四种方式:
- new创建对象
- 反射机制创建对象
- 克隆创建对象
- 反序列化创建对象
直接上实操代码:
Preson实体类
package com.bean;
import java.io.Serializable;
public class Person implements Cloneable, Serializable {
String name;
Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Person(String name, Integer age) {
this.name = name;
this.age = age;
}
public Person(){
}
@Override
public Person clone() throws CloneNotSupportedException {
return (Person) super.clone();
}
@Override
public String toString() {
return "{name:"+this.name+",age:"+this.age+"}";
}
}
测试代码:
package com.company;
import com.bean.*;
import com.sun.javafx.util.Utils;
import com.sun.xml.internal.messaging.saaj.util.ByteInputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.lang.reflect.Constructor;
public class Main {
public static void main(String[] args) throws Exception {
//new创建对象
Person person = new Person("张三", 15);
//反射机制创建对象
Constructor<?>[] constructors = Person.class.getDeclaredConstructors();
Constructor<?> haveArgsConstructor = constructors[1];
Object reflectPerson = haveArgsConstructor.newInstance("张三", 15);
System.out.println(reflectPerson);
System.out.println(person == reflectPerson);
//clone创建对象
Person copyPerson = person.clone();
System.out.println(copyPerson);
System.out.println(person == copyPerson);
//序列化创建对象
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(person);
ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bis);
Object serializedPerson = ois.readObject();
System.out.println(serializedPerson);
System.out.println(person == serializedPerson);
}
}
运行结果:
{name:张三,age:19}
false
{name:张三,age:15}
false
{name:张三,age:15}
false
总结:
创建对象不一定需要调用构造函数,clone创建和反序列化创建就没有用到构造函数。