/*
* 實例化對象的幾種方式
* 1. new
* 2. 通過工廠方法返回對象
* 3. 調用對象的clone方法
* 4. 反射
* 5. 反序列化
* */
直接從第二種開始
1 /**
2 * 2工廠
3 */
4 String str = String.valueOf(23);
5 System.out.println(str);
6 /**
7 * 3.克隆方法 需要實現Cloneable接口和重寫clone方法
8 */
9
10 Person p = new Person();
11 p.setName("haha");
12 p.setAge(11);
13 Person pClone = (Person) p.clone();
14 System.out.println(p);
15 System.out.println(pClone);
16 /**
17 * 4.反射
18 * 反射1. Class類的newInstance方法,空參構造沒有被私有化
19 */
20 Class<Person> c = Person.class;
21 Person p = c.newInstance();
22 p.setName("zhsangsan");
23 p.setAge(23);
24 System.out.println(p);
25
26 //反射2 Class的getConstructor()獲取構造器,調用Constructor的newInstance方法 構造方法也不能被私有化
27 Constructor<Person> constructor = c.getConstructor();
28 Person p2 = constructor.newInstance();
29 p2.setName("lisi");
30 p2.setAge(21);
31 System.out.println(p2);
32
33 //反射3 構造方法被私有化 多一步,申請訪問
34 Constructor<Person> con = c.getDeclaredConstructor();
35 con.setAccessible(true);
36 Person p3 = con.newInstance();
37 p3.setName("wangwu");
38 p3.setAge(25);
39 System.out.println(p3);
40 /**
41 * 5.反序列化
42 * 條件:實現Serilizable接口
43 */
44
45 //需要序列化的對象
46 Person p = new Person("吳慷仁",54);
47 //序列化到磁盤"G:\seri.txt"
48 ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("G:\\seri.txt"));
49 //寫入數據
50 out.writeObject(p);
51 out.writeObject("美麗");
52 out.writeObject(new Date());
53 out.writeObject(123);
54 out.close();
55
56 //2.反序列化創建對象
57 ObjectInputStream in = new ObjectInputStream(new FileInputStream("G:\\seri.txt"));
58 Person obj1 = (Person)in.readObject();
59 String obj2 = (String)in.readObject();
60 Date obj3 = (Date)in.readObject();
61 int obj4 = (int)in.readObject();
62 System.out.println("String類" + obj2 + "\t" + "Date類" + obj3 + "\t" + "Person類" + obj1 + "\t"
63 + "int類" + obj4);
64 in.close();