java中创建对象的四种方式
- 通过new来创建
- 运用反射,调用java.lang.reflect.Constructor类的newInstance()实例方法
- 调用对象的clone方法(注意:要调用clone方法需要实现Cloneable接口)
- 运用反序列化手段,调用java.io.ObjectInputStream对象的readObject()方法,(使用序列化时,要实现Serializable接口,将一个对象序列化到磁盘上,而采用反序列化可以将磁盘上的对象信息转化到内存中)
案例
package com.junjun.test.Demo;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
/**
* java创建对象的四中方式
*/
public class Demo implements Cloneable,Serializable {
public static void test() {
System.out.println("main.test");
}
public static void main(String[] args) throws Exception {
//第一种方式 new
System.out.println("第一种方法创建java对象");
Demo demo1 = new Demo();
demo1.test();
//第二种创建对象的方法 运用反射
System.out.println("第二种方法创建java对象");
try {
//传入包名和类名
Class cla = Class.forName("com.junjun.test.Demo.Demo");
Demo demo2 =(Demo)cla.newInstance();
demo2.test();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
//第三种 调用对象的 clone 方法(注意:调用Clone方法需要实现Cloneable接口)
System.out.println("第三种方法创建java对象");
Demo demo3 =(Demo)demo1.clone();
demo3.test();
//第四种 运用反序列化手段,调用java.io.ObjectInputStream对象的readObject()方法
//注意:需要实现Serializable 接口
System.out.println("第四种方法创建java对象");
//序列化
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("person.ser"));
out.writeObject(demo1);
//反序列化
ObjectInputStream in = new ObjectInputStream(new FileInputStream("person.ser"));
Demo demo4 =(Demo)in.readObject();
demo4.test();
}
}