1.使用 new 关键字(最常用):
ObjectName obj = new ObjectName();
2.使用反射的Class类的newInstance()方法:
ObjectName obj = ObjectName.class.newInstance();
3.使用反射的Constructor类的newInstance()方法:
ObjectName obj = ObjectName.class.getConstructor.newInstance();
4.使用对象克隆clone()方法:
ObjectName obj = obj.clone();
5.使用反序列化(ObjectInputStream)的readObject()方法:
ObjectName obj = new ObjectInputStream(new FileInputStream(FILE_NAME)).readObject();
代码示例:
1.首先创建一个User类:
1 packagecom.example.demo.model;2
3 importjava.io.Serializable;4 importjava.util.Objects;5
6 public class User implementsSerializable, Cloneable {7 private static final long serialVersionUID = 1L;8 privateString id;9 privateString name;10 privateString phone;11
12 publicUser(String id, String name, String phone) {13 this.id =id;14 this.name =name;15 this.phone =phone;16 }17
18 publicUser() {19 }20
21 publicString getId() {22 returnid;23 }24
25 public voidsetId(String id) {26 this.id =id;27 }28
29 publicString getName() {30 returnname;31 }32
33 public voidsetName(String name) {34 this.name =name;35 }36
37 publicString getPhone() {38 returnphone;39 }40
41 public voidsetPhone(String phone) {42 this.phone =phone;43 }44
45 @Override46 public User clone() throwsCloneNotSupportedException {47 return (User) super.clone();48 }49
50 @Override51 public booleanequals(Object o) {52 if (this == o) return true;53 if (o == null || getClass() != o.getClass()) return false;54 User user =(User) o;55 return Objects.equals(id, user.id) &&
56 Objects.equals(name, user.name) &&
57 Objects.equals(phone, user.phone);58 }59
60 @Override61 public inthashCode() {62 returnObjects.hash(id, name, phone);63 }64
65 @Override66 publicString toString() {67 return "User{" +
68 "id='" + id + '\'' +
69 ", name='" + name + '\'' +
70 ", phone='" + phone + '\'' +
71 '}';72 }73 }
2.然后开始创建User对象:
1 packagecom.example.demo.practice;2
3 importcom.example.demo.model.User;4
5 importjava.io.FileInputStream;6 importjava.io.FileOutputStream;7 importjava.io.ObjectInputStream;8 importjava.io.ObjectOutputStream;9
10 public classObjectCreation {11 private static final String FILE_NAME = "user.obj";12
13 public static void main(String[] args) throwsException {14 //方式一 使用new关键字
15 User user = new User("1", "张三", "135****8457");16 System.out.println(user.toString());17
18 //方式二 使用Class类的newInstance()方法
19 User user2 = User.class.newInstance();20 user2.setName("李四");21 System.out.println(user2.toString());22
23 //方式三 使用Constructor类的newInstance()方法
24 User user3 = User.class.getConstructor().newInstance();25 user3.setName("王五");26 System.out.println(user3.toString());27
28 //方式四 使用clone()方法,前提是被克隆类必须实现Cloneable接口并且重写其clone()方法
29 User user4 =user.clone();30 System.out.println(user4.toString());31 System.out.println(user ==user4);32 System.out.println(user.equals(user4));33
34 //方式五 使用反序列化方式,调用ObjectInputStream对象的readObject()方法,前提是类需要实现Serializable接口35 //序列化
36 ObjectOutputStream oos = new ObjectOutputStream(newFileOutputStream(FILE_NAME));37 oos.writeObject(user);38 //反序列化
39 ObjectInputStream ois = new ObjectInputStream(newFileInputStream(FILE_NAME));40 User user5 =(User) ois.readObject();41 System.out.println(user5.toString());42 }43 }
输出结果如下:
User{id='1', name='张三', phone='135****8457'}
User{id='null', name='李四', phone='null'}
User{id='null', name='王五', phone='null'}
User{id='1', name='张三', phone='135****8457'}false
trueUser{id='1', name='张三', phone='135****8457'}