Java创建对象的几种方式(重要):
1、用new语句创建对象,这是最常见的创建对象的方法。
2、运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法。
3、调用对象的clone()方法。
4、运用反序列化手段,调用java.io.ObjectInputStream对象的 readObject()方法。
(1)和(2)都会明确的显式的调用构造函数;
(3)是在内存上对已有对象的影印,所以不会调用构造函数;
(4)是从文件中还原类的对象,也不会调用构造函数。
代码展示
public class Person implements Cloneable, Serializable {
String name;
Integer age;
public Person() {
}
public Person(String name, Integer age) {
this.name = name;
this.age = 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;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public Person clone() throws CloneNotSupportedException {
return (Person) super.clone();
}
} private static final String path = "test.txt";
@Test
public void testNewObject(){
Person u = new Person("u", 1);
System.out.println(u.toString());
}
@Test
public void testReflectCreateObject(){
try {
Class person = Class.forName("com.test.Person");
try {
Constructor constructor = person.getConstructor(String.class,Integer.class);
Object p = constructor.newInstance("r", 1);
System.out.println(p);
} catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
e.printStackTrace();
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
@Test
public void testClone(){
Person person = new Person("b",1);
try {
Person p1 = person.clone();
System.out.println(p1.toString());
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
}
@Test
public void testSerializePerson(){
try {
SerializePerson();
} catch (IOException e) {
e.printStackTrace();
}
try {
DeserializePerson();
} catch (Exception e) {
e.printStackTrace();
}
}
private static void SerializePerson() throws FileNotFoundException,
IOException {
Person person = new Person("w",1);
// ObjectOutputStream 对象输出流,将Person对象存储到E盘的Person.txt文件中,完成对Person对象的序列化操作
ObjectOutputStream oo = new ObjectOutputStream(new FileOutputStream(
path));
oo.writeObject(person);
System.out.println("Person对象序列化成功!");
oo.close();
}
private static Person DeserializePerson() throws Exception, IOException {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(
path));
Person person = (Person) ois.readObject();
System.out.println(person.toString());
return person;
}版权声明:本文为huzi99原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。