Java基础知识强化25:Java创建对象的四种方式

1. Java程序中对象的创建有四种方式:

● 调用new语句创建对象,最常见的一种

● 运用反射手段创建对象,调用java.lang.Class 或者 java.lang.reflect.Constructor 类的newInstance()实例方法

● 调用对象的clone()方法

● 运用序列化手段,调用java.io.ObjectInputStream 对象的 readObject()方法.

 

2. 四种方式的代码演示,如下:

(1)创建Java工程,如下:

 

(2)代码如下:

Person.java,如下:

 1 package com.himi.demo;
 2 
 3 public class Person implements Cloneable {
 4     
 5     private int age;
 6     private String name;
 7     
 8     public Person() {
 9         
10     }
11     public Person(int age, String name) {
12         this.age = age;
13         this.name = name;
14     }
15     public int getAge() {
16         return age;
17     }
18     public void setAge(int age) {
19         this.age = age;
20     }
21     public String getName() {
22         return name;
23     }
24     public void setName(String name) {
25         this.name = name;
26     }
27     
28     
29     @Override
30     protected Object clone() throws CloneNotSupportedException {
31         // TODO Auto-generated method stub
32         return super.clone();
33     }
34     
35     
36 
37 }

与此同时,Person2.java,如下:

 1 package com.himi.demo;
 2 
 3 import java.io.Serializable;
 4 
 5 public class Person2 implements Serializable {
 6     
 7     private static final long serialVersionUID = 8735345334183008720L;
 8     private int age;
 9     private String name;
10     
11     public Person2() {
12         
13     }
14     public Person2(int age, String name) {
15         this.age = age;
16         this.name = name;
17     }
18     public int getAge() {
19         return age;
20     }
21     public void setAge(int age) {
22         this.age = age;
23     }
24     public String getName() {
25         return name;
26     }
27     public void setName(String name) {
28         this.name = name;
29     }
30     
31     
32     @Override
33     public String toString() {
34         // TODO Auto-generated method stub
35         return "name=" + name + ", age=" + age; 
36     }
37     
38     
39 
40 }

 

测试类,如下:

 1 package com.himi.demo;
 2 
 3 import java.io.FileInputStream;
 4 import java.io.FileOutputStream;
 5 import java.io.ObjectInputStream;
 6 import java.io.ObjectOutputStream;
 7 import java.util.Date;
 8 
 9 public class TestDemo {
10     
11     public static void main(String[] args) throws Exception {
12         //1. 使用new构造方法
13         Person p1 = new Person(23,"Jack");
14         System.out.println("使用new构造方法:"+p1);
15         
16         //2. 使用反射,默认调用空构造,必须实现,负责报错:InstantiationException
17         Person p2 = (Person) Class.forName("com.himi.demo.Person").newInstance();
18         System.out.println("使用反射:"+p2);
19         
20         //3. 使用clone,必须实现Cloneable接口,否则抛出CloneNotSupportedException
21         Person p3 = (Person) p1.clone();
22         System.out.println("使用clone:"+p3);
23         
24         //4. 用对象流来实现,前提是对象必须实现 Serializable
25         System.out.println();
26         System.out.println("----------用对象流来实现,前提是对象必须实现 Serializable---------");
27         ObjectOutputStream out = new ObjectOutputStream (new FileOutputStream("p.txt")); 
28         //序列化对象 
29         Person2 obj = new Person2(24,"haobo"); 
30         out.writeObject("你好!"); 
31         out.writeObject(new Date()); 
32         out.writeObject(obj); 
33         out.writeInt(123); //写入基本类型数据 
34         out.close(); 
35         
36         //反序列化对象 
37         ObjectInputStream in = new ObjectInputStream(new FileInputStream("p.txt")); 
38         
39         System.out.println("obj1=" + (String) in.readObject()); 
40         System.out.println("obj2=" + (Date) in.readObject()); 
41         
42         Person2 obj1 = (Person2) in.readObject(); 
43         System.out.println("obj1=" + obj1); 
44         
45         int num = in.readInt(); 
46         System.out.println("num=" + num); 
47         
48         in.close(); 
49     }
50 
51 }

运行结果,如下:

 

 

posted on 2015-09-18 12:17  鸿钧老祖  阅读(240)  评论(0编辑  收藏  举报

导航