Java创建对象的5种方式
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 package com.example.demo.model; 2 3 import java.io.Serializable; 4 import java.util.Objects; 5 6 public class User implements Serializable, Cloneable { 7 private static final long serialVersionUID = 1L; 8 private String id; 9 private String name; 10 private String phone; 11 12 public User(String id, String name, String phone) { 13 this.id = id; 14 this.name = name; 15 this.phone = phone; 16 } 17 18 public User() { 19 } 20 21 public String getId() { 22 return id; 23 } 24 25 public void setId(String id) { 26 this.id = id; 27 } 28 29 public String getName() { 30 return name; 31 } 32 33 public void setName(String name) { 34 this.name = name; 35 } 36 37 public String getPhone() { 38 return phone; 39 } 40 41 public void setPhone(String phone) { 42 this.phone = phone; 43 } 44 45 @Override 46 public User clone() throws CloneNotSupportedException { 47 return (User) super.clone(); 48 } 49 50 @Override 51 public boolean equals(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 @Override 61 public int hashCode() { 62 return Objects.hash(id, name, phone); 63 } 64 65 @Override 66 public String toString() { 67 return "User{" + 68 "id='" + id + '\'' + 69 ", name='" + name + '\'' + 70 ", phone='" + phone + '\'' + 71 '}'; 72 } 73 }
2.然后开始创建User对象:
1 package com.example.demo.practice; 2 3 import com.example.demo.model.User; 4 5 import java.io.FileInputStream; 6 import java.io.FileOutputStream; 7 import java.io.ObjectInputStream; 8 import java.io.ObjectOutputStream; 9 10 public class ObjectCreation { 11 private static final String FILE_NAME = "user.obj"; 12 13 public static void main(String[] args) throws Exception { 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(new FileOutputStream(FILE_NAME)); 37 oos.writeObject(user); 38 //反序列化 39 ObjectInputStream ois = new ObjectInputStream(new FileInputStream(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 true User{id='1', name='张三', phone='135****8457'}