假设现在有一个User类,我们来通过以下几种方式创建出user对象。
User类
public class User {
private int id;
private String username;
private String password;
public String nickName;
public String phone;
public User(){}
public User(int id, String username){
this.id = id;
this.username = username;
}
public User(int id, String username, String password, String nickName) {
this.id = id;
this.username = username;
this.password = password;
this.nickName = nickName;
}
}
通过new关键字创建对象,这是最常见的一种创建对象的方式了,可以调用任意的构造函数进行对象的创建。
使用new关键字创建user对象
public static void main(String[] args) {
User user1 = new User();
System.out.println("无参构造函数创建的对象:" + user1);
User user2 = new User(2,"用户2");
System.out.println("含部分参数构造函数创建的对象:" + user2);
User user3 = new User(3,"用户3","12345678","小明");
System.out.println("含全部参数构造函数创建的对象:" + user3);
}
所谓克隆,就是指依照已存在的数据,复制出一份一样的数据。
关于克隆的详细解析可以参考我的这篇文章:java中浅克隆与深克隆解析
使用克隆创建对象,需要让User类实现Cloneable接口,并重写clone方法。
public class User implements Cloneable {
private int id;
private String username;
private String password;
public String nickName;
public String phone;
public User(){}
public User(int id, String username){
this.id = id;
this.username = username;
}
public User(int id, String username, String password, String nickName) {
this.id = id;
this.username = username;
this.password = password;
this.nickName = nickName;
}
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
使用克隆创建user对象
public static void main(String[] args) {
User user = new User(1,"克隆创建的user对象");
User user_cloned = (User) user.clone();
System.out.println(user_cloned);
}
关于反射的详细解析看这里:java中的反射机制解析
先获取到class对象,再调用class的newInstance方法创建对象。
Class c = Class.forName("test.User");
User user = (User) c.newInstance();
System.out.println(user);
先通过class对象获取User类的构造器,再调用构造器的newInstance方法创建对象。
Constructor<User> constructor = User.class.getConstructor();
User user = constructor.newInstance();
System.out.println(user);
使用序列化方式创建对象,需要让User类实现Serializable接口。
public class User implements Serializable {
}
使用序列化方式创建user对象
public static void main(String[] args) {
User user = new User(3,"用户3","12345678","小明");
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
objectOutputStream.writeObject(user); // 序列化
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream);
User user1 = (User) objectInputStream.readObject();
System.out.println(user1);
}
序列化也是一种实现深克隆的方式。具体详见:java中浅克隆与深克隆解析
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/weixin_43598687/article/details/122003980
内容来源于网络,如有侵权,请联系作者删除!