實例化對象的五種方式


/*
* 實例化對象的幾種方式
* 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();
 
         
         
        



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM