Java创建对象的方式主要有以下四种:
(1)通过new语句实例化一个对象;
(2)通过反射机制创建对象;
(3)通过clone()方法创建一个对象,被克隆的类需要实现 Cloneable
接口;
(4)通过反序列化的方式创建对象,被反序列化的类需要实现 Serializable
接口;
序列化是一种将对象以一连串的字节描述的过程,可以将对象写在流里进行网络传输,或者保存到文件、数据库等系统里;与序列化相反的是反序列化,它将流转换为对象;
四种创建对象的代码示例:
public class User implements Cloneable, Serializable {
private String name;
public User() {
}
public User(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public static void main(String[] args) throws Exception {
// 通过 new 语句创建一个对象
User user1 = new User("张三");
System.out.println(user1.getName());
// 通过反射机制创建一个对象
User user2 = (User) Class.forName("com.example.User").newInstance();
user2.setName("李四");
System.out.println(user2.getName());
// 通过clone()方法创建一个对象
User user3 = (User) user2.clone();
System.out.println(user3.getName());
System.out.println(user2 == user3);
// 通过反序列化的方式创建一个对象
ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream("user.obj"));
outputStream.writeObject(user3);
outputStream.close();
ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream("user.obj"));
User user4 = (User) inputStream.readObject();
inputStream.close();
System.out.println(user4.getName());
System.out.println(user3 == user4);
}
}
程序运行的结果如下:
张三
李四
李四
false
李四
false
更多有关Java面试相关的知识点可以关注【Java面试手册】小程序,涉及Java基础、多线程、JVM、Spring、Spring Boot、Spring Cloud、Mybatis、Redis、数据库、数据结构与算法等。
::: hljs-center
:::