对象难找,教你几招创建对象的方式

x33g5p2x  于2021-12-20 转载在 其他  
字(2.5k)|赞(0)|评价(0)|浏览(405)

假设现在有一个User类,我们来通过以下几种方式创建出user对象。

User类

  1. public class User {
  2. private int id;
  3. private String username;
  4. private String password;
  5. public String nickName;
  6. public String phone;
  7. public User(){}
  8. public User(int id, String username){
  9. this.id = id;
  10. this.username = username;
  11. }
  12. public User(int id, String username, String password, String nickName) {
  13. this.id = id;
  14. this.username = username;
  15. this.password = password;
  16. this.nickName = nickName;
  17. }
  18. }

new

通过new关键字创建对象,这是最常见的一种创建对象的方式了,可以调用任意的构造函数进行对象的创建。

使用new关键字创建user对象

  1. public static void main(String[] args) {
  2. User user1 = new User();
  3. System.out.println("无参构造函数创建的对象:" + user1);
  4. User user2 = new User(2,"用户2");
  5. System.out.println("含部分参数构造函数创建的对象:" + user2);
  6. User user3 = new User(3,"用户3","12345678","小明");
  7. System.out.println("含全部参数构造函数创建的对象:" + user3);
  8. }

克隆

所谓克隆,就是指依照已存在的数据,复制出一份一样的数据。

关于克隆的详细解析可以参考我的这篇文章:java中浅克隆与深克隆解析

使用克隆创建对象,需要让User类实现Cloneable接口,并重写clone方法。

  1. public class User implements Cloneable {
  2. private int id;
  3. private String username;
  4. private String password;
  5. public String nickName;
  6. public String phone;
  7. public User(){}
  8. public User(int id, String username){
  9. this.id = id;
  10. this.username = username;
  11. }
  12. public User(int id, String username, String password, String nickName) {
  13. this.id = id;
  14. this.username = username;
  15. this.password = password;
  16. this.nickName = nickName;
  17. }
  18. public Object clone() throws CloneNotSupportedException {
  19. return super.clone();
  20. }
  21. }

使用克隆创建user对象

  1. public static void main(String[] args) {
  2. User user = new User(1,"克隆创建的user对象");
  3. User user_cloned = (User) user.clone();
  4. System.out.println(user_cloned);
  5. }

反射

关于反射的详细解析看这里:java中的反射机制解析

Class类的newInstance方法

先获取到class对象,再调用class的newInstance方法创建对象。

  1. Class c = Class.forName("test.User");
  2. User user = (User) c.newInstance();
  3. System.out.println(user);

Constructor类的newInstance方法

先通过class对象获取User类的构造器,再调用构造器的newInstance方法创建对象。

  1. Constructor<User> constructor = User.class.getConstructor();
  2. User user = constructor.newInstance();
  3. System.out.println(user);

序列化

使用序列化方式创建对象,需要让User类实现Serializable接口。

  1. public class User implements Serializable {
  2. }

使用序列化方式创建user对象

  1. public static void main(String[] args) {
  2. User user = new User(3,"用户3","12345678","小明");
  3. ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
  4. ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
  5. objectOutputStream.writeObject(user); // 序列化
  6. ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
  7. ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream);
  8. User user1 = (User) objectInputStream.readObject();
  9. System.out.println(user1);
  10. }

序列化也是一种实现深克隆的方式。具体详见:java中浅克隆与深克隆解析

相关文章