java怎么创建对象:四种主流实现方式
java怎么创建对象一共有四种主流写法,new关键字适合绝大多数常规开发,反射newInstance适合框架动态实例化,clone方法用于复制已有对象,反序列化可以从字节流恢复对象;new关键字可以调用任意构造方法,反射无参newInstance仅能调用public无参构造,clone必须实现Cloneable接口,反序列化不需要执行构造方法;仅当类没有无参构造、构造方法私有或者需要复制实例时,才优先选用后三种方式,普通业务代码直接使用new即可。
java怎么创建对象:new关键字
这是项目里使用频次较高的写法,你可以直接调用无参或者有参构造方法完成实例化,JVM会直接在堆内存开辟对象空间并执行构造初始化。
代码示例:Personp=newPerson("张三",20);
该写法没有额外接口依赖,编译期就能确定类,运行效率较为稳定,适合所有常规业务开发场景。
java怎么创建对象:反射机制
反射分为Class类newInstance和Constructor构造器newInstance两种写法,Class类的newInstance仅支持public无参构造,一旦类只保留有参构造就会抛出异常;Constructor方式可以匹配任意权限、任意参数的构造方法,灵活性更强。
代码示例:Classclazz=Class.forName("Person");Constructorcon=clazz.getConstructor(String.class,int.class);Personp=(Person)con.newInstance("李四",22);
这种写法多用于Spring等框架,在运行时根据类名动态创建实例,运行开销会高于new关键字,不建议在高频循环代码中频繁调用。
java怎么创建对象:clone复制对象
你要先让目标类实现Cloneable接口,并重写clone()方法,才能调用该方法生成对象副本;默认是浅拷贝,对象内部引用类型字段不会生成新实例,仅复制内存地址。
代码示例:Personp1=newPerson();Personp2=(Person)p1.clone();
该方式不会调用构造方法,适合快速复制已有实例,不适合从零新建对象。
java怎么创建对象:反序列化生成对象
把对象写入IO字节流之后,再通过ObjectInputStream读取字节流,就能生成全新对象;这个过程完全不执行构造方法,只依靠字节数据还原实例。
该方式多用于网络传输与持久化场景,需要让类实现Serializable序列化接口,否则会抛出序列化异常。
| 创建方式 | 是否调用构造方法 | 适用场景 | 性能表现 |
|---|---|---|---|
| new关键字 | 调用指定构造 | 常规业务开发 | 效率较高 |
| 反射Constructor | 调用对应构造 | 框架动态实例化 | 开销偏大 |
| clone方法 | 不调用构造 | 复制已有对象 | 速度中等 |
| 反序列化 | 不调用构造 | 对象持久化传输 | 开销偏高 |
开发时需要留意边界限制:如果类只保留私有有参构造,new与Class无参newInstance都会报错,只能用Constructor反射指定构造方法;如果没有实现Cloneable接口,直接调用clone会抛出CloneNotSupportedException异常。
