1.用new 創(chuàng)建對(duì)象,這是最常用的創(chuàng)建對(duì)象的方法。
User user1 = new User(2,"青秧");
2.運(yùn)用反射,調(diào)用Java.lang.Class或者java.lang.reflect.Constructor類(lèi)的newInstance()實(shí)例方法。
Class<?> c = Class.forName("com.itheima.User");//獲取字節(jié)碼文件對(duì)象
User user=(User)c.newInstance();
3.調(diào)用對(duì)象的clone()方法
clone()表示克隆,使用這個(gè)實(shí)例化一個(gè)對(duì)象的前提是:前面已經(jīng)有一個(gè)實(shí)例化過(guò)的對(duì)象
User user1 = new User(2,"青秧");
User user2 = (User) user1.clone();
4.運(yùn)用反序列化手段,調(diào)用java.io.ObjectInputStream對(duì)象的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);
//寫(xiě)對(duì)象
oos.writeObject(p);
oos.close();
}
public static void readObj() throws IOException, ClassNotFoundException{
//反序列化
ObjectInputStream ois= new ObjectInputStream(new FileInputStream("d:\\work\\abc\\person.txt"));
//讀對(duì)象
Object obj = ois.readObject();//相當(dāng)于new Person();
System.out.println(obj);
ois.close();
}
}
1和2都會(huì)明確的顯式的調(diào)用構(gòu)造函數(shù) ;
3是在內(nèi)存上對(duì)已有對(duì)象的影印,所以不會(huì)調(diào)用構(gòu)造函數(shù) ;
4是從文件中還原類(lèi)的對(duì)象,也不會(huì)調(diào)用構(gòu)造函數(shù)。