1.用new 创建对象,这是最常用的创建对象的方法。
User user1 = new User(2,"柳岩");
2.运用反射,调用Java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法。
Class<?> c = Class.forName("com.itheima.User");//获取字节码文件对象
User user=(User)c.newInstance();
3.调用对象的clone()方法
clone()表示克隆,使用这个实例化一个对象的前提是:前面已经有一个实例化过的对象
User user1 = new User(2,"柳岩");
User user2 = (User) user1.clone();
4.运用反序列化手段,调用java.io.ObjectInputStream对象的readObject()方法。
public class Demo01_ObjectOutputStream {
public static void main(String[] args) throws IOException, ClassNotFoundException {
// writeObj();
readObj();
}
public static void writeObj() throws IOException{
//序列化
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("d:\\work\\abc\\person.txt"));
Person p = new Person("柳岩",38);
//写对象
oos.writeObject(p);
oos.close();
}
public static void readObj() throws IOException, ClassNotFoundException{
//反序列化
ObjectInputStream ois= new ObjectInputStream(new FileInputStream("d:\\work\\abc\\person.txt"));
//读对象
Object obj = ois.readObject();//相当于new Person();
System.out.println(obj);
ois.close();
}
}
1和2都会明确的显式的调用构造函数 ;
3是在内存上对已有对象的影印,所以不会调用构造函数 ;
4是从文件中还原类的对象,也不会调用构造函数。