【Java基础】Java对象创建的几种方式
创始人
2024-05-26 06:35:22
0

先上关键内容,所用到的代码请参考文末示例代码。

一、使用new关键字创建对象

这是一种最常用的创建对象的方式。

Student student1 = new Student();

二、使用Class的newInstance()方法创建对象

需要有一个无参构造方法,这个newInstance()方法调用无参的构造函数创建对象。

类名.calss.newInstance( )

Student student2 = Student.class.newInstance();

该方法就是反射机制,事实上Class的newInstance()方法内部就是调用Constructor的newInstance()方法。

Class类的newInstance只能触发无参构造方法创建对象,而构造器类的newInstance能触发有参数或者任意参数的构造方法来创建对象。

三、使用Constructor类的newInstance()方法创建对象

java.lang.reflect.Constructor类里也有一个newInstance()方法可以创建对象。我们可以通过这个newInstance()方法调用有参数的和私有的构造函数。

Constructor student3 = Constructor.class.newInstance();

四、使用克隆clone()方法创建对象

Tips:要使用clone()方法,我们需要先实现Cloneable接口并实现其定义的clone()方法

无论何时我们调用一个对象的clone()方法,jvm就会创建一个新的对象,将前面对象的内容全部拷贝进去。用clone()方法创建对象并不会调用任何构造函数。

Student student4 = new Student().clone();

五、使用反序列化创建对象

Java序列化是指把Java对象转换为字节序列的过程,而Java反序列化是指把字节序列恢复为Java对象的过程;

使用反序列化:当我们序列化和反序列化一个对象,jvm会给我们创建一个单独的对象。在反序列化时,jvm创建对象并不会调用任何构造函数。

为了反序列化一个对象,我们需要让我们的类实现Serializable接口。

ObjectInputStream ois = new ObjectInputStream(new FileInputStream(FILE_NAME));
// 5、使用反序列化创建对象
Object student5 = ois.readObject();

六、创建对象的5种方式调用构造器总结

创建对象的方式

是否调用了构造器

使用new关键字创建对象

Class.newInstance()

Constructor.newInstance()

clone()

反序列化

Java创建实例对象是不是必须要通过构造函数?这其实是衍生出来的一个面试题。 上面问题的答案很明显了:Java创建实例对象,并不一定必须要调用构造器的。

七、示例代码(全)

以下是本文所用到的所有示例代码。

7.1 编写Student学生类

package com.effective.chapter2.other;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import java.io.Serializable;@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student implements Cloneable, Serializable {private String name;private Integer age;@Overridepublic Student clone() {try {Student clone = (Student) super.clone();// TODO: copy mutable state here, so the clone can't change the internals of the originalreturn clone;} catch (CloneNotSupportedException e) {throw new AssertionError();}}
}

7.2 编写测试类

package com.effective.chapter2.other;import java.io.*;
import java.lang.reflect.Constructor;public class CreateObjectTest {private static final String FILE_NAME = "student.obj";public static void main(String[] args) throws InstantiationException, IllegalAccessException, IOException {// 1、使用new关键字创建对象Student student1 = new Student();System.out.println("使用new关键字创建对象:" + student1);// 2、使用Class类的newInstance()方法创建对象Student student2 = Student.class.newInstance();System.out.println("使用Class类的newInstance()方法创建对象:" + student2);// 3、使用Constructor类的newInstance()方法创建对象Constructor student3 = Constructor.class.newInstance();System.out.println("使用Constructor类的newInstance()方法创建对象:" + student3);// 4、使用clone()方法创建对象Student student4 = student2.clone();System.out.println("使用clone()方法创建对象:" + student4);try {// Java序列化是指把Java对象转换为字节序列的过程,而Java反序列化是指把字节序列恢复为Java对象的过程;// 序列化对象ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(FILE_NAME));oos.writeObject(student1);ObjectInputStream ois = new ObjectInputStream(new FileInputStream(FILE_NAME));// 5、使用反序列化创建对象Object student5 = ois.readObject();System.out.println("使用反序列化创建对象:" + student5);} catch (ClassNotFoundException e) {throw new RuntimeException(e);}}
}

完结!

相关内容

热门资讯

南宁警方通报“某学校发生一起伤... 16日晚,南宁市公安局江南分局官方微博发布警情通报,全文如下:
钱文海出任国都证券董事长!浙商... 国都证券5月16日公告,其于前一日召开2025年第一次临时股东会,并选举产生了新一届董事会、监事会。...
成都拟对“砸车侠”等见义勇为人... 中新网成都5月16日电 从不顾自身安危跳河砸车的“砸车侠”,到合力勇斗持刀歹徒的普通邻里,见义勇为人...
中原内配:5月16日召开董事会... 中原内配(维权)(SZ 002448,收盘价:8.25元)5月16日晚间发布公告称,公司第十一届第一...
集装箱出厂,方向美国!“中国电... 转自:交汇点编者按:当前,单边主义、保护主义加剧,外部环境不确定不稳定因素增多,面对困难和挑战,我国...
首批商用堆产碳-14同位素投入... 中证报中证网讯(记者杨洁)5月16日,记者自中国核电获悉,当日,首批商用堆产碳-14同位素产品从中国...
财联社5月16日晚间新闻精选 转自:财联社【财联社5月16日晚间新闻精选】 1、证监会鼓励私募基金参与上市公司并购重组,首次建立简...
中兰环保:实控人孔熊君拟减持不... 中兰环保(300854.SZ)公告称,公司实际控制人孔熊君计划减持不超过3,031,305股,占公司...
宁德时代上市“倒计时”:厘定每... 宁德时代将5月20日在联交所主板开始买卖,每股263.00港元,筹资规模扩大至46亿美元,月度期权将...
上海首创首发进口消费品检验便利... 5月16日,上海市商务委员会与上海海关联合发布《关于开展首发进口消费品检验便利化措施试点的公告》,在...
全球粮食危机报告:去年逾2.9... 中新社北京5月16日电 (记者 刘亮)16日发布的《全球粮食危机报告》显示,2024年,53个国家和...
京东618于5月底开启 将为用... 中国青年报客户端讯(中青报·中青网见习记者 刘佳佳 记者 宁迪)5月15日,“京东618惊喜开放日”...
证监会正式对外公布实施修订后的... 转自:北京商报北京商报讯(记者 马换换 王蔓蕾)5月16日晚间,证监会官网发文称,《关于修改<上市公...
调研速递|神州泰岳接受超百家投... 5月16日下午15:00 - 17:00,北京神州泰岳软件股份有限公司在全景网“投资者关系互动平台”...
美股异动 | 哔哩哔哩(BIL... 周五,哔哩哔哩(BILI.US)涨6%,报18.81美元。消息面上,哔哩哔哩将于5月20日(即下周二...
中国通信服务全资子公司中标一项... (转自:快查一企业中标了)快查APP显示,中国通信服务相关公司江西省通信产业服务有限公司于2025年...
微软就“解绑”Teams与Of... 欧盟委员会5月16日宣布,微软已提出一系列新承诺,旨在了结有关将Teams与Office产品捆绑销售...
多少人愿买高价“美国货”? 制... 转自:新华社 “美国制造”商品究竟贵多少?有多少美国消费...
一互联网“大厂”餐饮专家收受供... 中国青年报客户端讯(中青报·中青网记者 刘言)一互联网“大厂”餐饮专家利用职务之便,3年收受供应商贿...
香港今年首季经济稳健扩张 全年... 中新网香港5月16日电 (魏华都 黄岩妮)香港特区政府16日举行记者会,介绍今年第一季度香港经济及今...