1.用new 創(chuàng)建對象,這是最常用的創(chuàng)建對象的方法疫衩。
User user1 = new User(2,"青秧");
2.運用反射硅蹦,調(diào)用Java.lang.Class或者java.lang.reflect.Constructor類的newInstance()實例方法。
Class<?> c = Class.forName("com.itheima.User");//獲取字節(jié)碼文件對象
User user=(User)c.newInstance();
3.調(diào)用對象的clone()方法
clone()表示克隆闷煤,使用這個實例化一個對象的前提是:前面已經(jīng)有一個實例化過的對象
User user1 = new User(2,"青秧");
User user2 = (User) user1.clone();
4.運用反序列化手段童芹,調(diào)用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都會明確的顯式的調(diào)用構造函數(shù) 鲤拿;
3是在內(nèi)存上對已有對象的影印假褪,所以不會調(diào)用構造函數(shù) ;
4是從文件中還原類的對象近顷,也不會調(diào)用構造函數(shù)生音。