Java中有几种创建对象的方式?
大概有这几种
- new
- Class 实例化
- 构造实例化
- 反序列化
- 克隆
package jvm;
import model.Info;
import java.io.*;
import java.lang.reflect.InvocationTargetException;
public class ObjNewDemo {
public static void main(String[] args) {
// 1.new 的方式 调用构造
{
Info info = new Info("new Class");
System.out.println("new Class ---> " + info.getInfo());
}
// 2.Class.newInstance 调用构造
{
try {
Info info = Info.class.newInstance();
System.out.println("Class.newInstance ---> " + info.getInfo());
} catch (InstantiationException e) {
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
}
// 3.Constructor.newInstance 调用构造
{
try {
Info info = Info.class.getConstructor().newInstance();
System.out.println("Constructor.newInstance ---> " + info.getInfo());
Info infoWithParam = Info.class.getDeclaredConstructor(String.class).newInstance("Class.newInstance");
System.out.println("Constructor.newInstance withParam ---> " + infoWithParam.getInfo());
} catch (InstantiationException e) {
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
} catch (InvocationTargetException e) {
throw new RuntimeException(e);
} catch (NoSuchMethodException e) {
throw new RuntimeException(e);
}
}
// 4.反序列化
{
try {
// 先序列化到文件
ObjectOutputStream objOS = new ObjectOutputStream(new FileOutputStream("C://Info.tmp"));
objOS.writeObject(new Info("Serializable"));
objOS.flush();
objOS.close();
// 再通过反序列化创建对象
ObjectInputStream objIS = new ObjectInputStream(new FileInputStream("C://Info.tmp"));
Info info = (Info) objIS.readObject();
System.out.println("Serializable ---> " + info.getInfo());
} catch (IOException e) {
throw new RuntimeException(e);
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
}
// 5.克隆,被克隆的类必须实现 Cloneable 接口
{
Info srcObj = new Info("Cloneable");
try {
Info info = srcObj.clone();
System.out.println("Cloneable ---> " + info.getInfo());
System.out.println("Cloneable ---> (info == srcObj) ? " + (info == srcObj));
System.out.println("Cloneable ---> (info.equals(srcObj)) ? " + info.equals(srcObj));
} catch (CloneNotSupportedException e) {
throw new RuntimeException(e);
}
}
}
}
new Class ---> new Class
Class.newInstance ---> null
Constructor.newInstance ---> null
Constructor.newInstance withParam ---> Class.newInstance
Serializable ---> Serializable
Cloneable ---> Cloneable
Cloneable ---> (info == srcObj) ? false
Cloneable ---> (info.equals(srcObj)) ? true
逃避不一定躲得过,面对不一定最难过
本文作者:Yzl1990
本文链接:https://www.cnblogs.com/yangzhenlong/p/17943776
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步