java中创建对象的几种方式
调用类的构造方法
User user= new User();
Class类的newInstance()方法(Java 9开始已弃用)
通过反射机制创建对象(Java 9开始已弃用)
// 通过反射机制创建对象
User user = User.class.newInstance();
Constructor类的newInstance()方法
也是反射方式,比Class.newInstance()更灵活
Constructor<User> constructor = User.class.getConstructor(); // 获取无参构造
User user = constructor.newInstance(); // 调用无参构造创建实例
// 假设User有构造方法 User(String name, int age)
Constructor<User> constructor =
User.class.getConstructor(String.class, int.class); // 明确参数类型
User user = constructor.newInstance("张三", 25); // 传入构造参数
clone()方法
User user= new User();
User userClone = (User) user.clone(); // 需要实现Cloneable接口
反序列化(从文件恢复对象)
@Data
@AllArgsConstructor
// 可序列化的User类
public class User implements Serializable {
private static final long serialVersionUID = 1L; // 序列化版本号
private String name;
}
public class Main {
public static void main(String[] args) {
// 1. 先序列化一个User对象到文件(写入)
serializeUser("C:\\Users\\admin\\Downloads\\user.dat");
// 2. 从文件反序列化User对象(读取)
deserializeUser("C:\\Users\\admin\\Downloads\\user.dat");
}
// 序列化User对象到文件
private static void serializeUser(String filePath) {
User user = new User("Alice");
try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(filePath))) {
out.writeObject(user);
System.out.println("序列化成功: " + user);
} catch (IOException e) {
e.printStackTrace();
}
}
// 从文件反序列化User对象
private static void deserializeUser(String filePath) {
try (ObjectInputStream in = new ObjectInputStream(new FileInputStream(filePath))) {
User user = (User) in.readObject(); // 强制类型转换
System.out.println("反序列化成功: " + user);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
Java中创建对象的几种方式

被折叠的 条评论
为什么被折叠?



