背??景又到了一年一度的情人节,祝所有的程序员和有情人终成眷属!今天公众号本来是有广告宣传的,暂时被拒了,唉。.这个情人节有点伤,还好对方没有鸽子。.情人节该写些什么?!单身狗应该不少吧?没关系,栈长,本文教你6种创建对象的方法,从低端到高端,各种创建方法,总有一种适合你,如果你没有对象,自己创造一个!2022年,你必须脱单,告别单身!创建对象的6种方式假设有一个girlfriend类:@Data@NoArgsConstructor@AllArgsConstructorclassGirlFriend{privateStringname;}注解使用了Lombok框架注解,方便快速开发。不熟悉的可以看看这篇文章:推荐一款代码神器,至少省一半代码!方法一:new如果没有对象,就新建一个。是的,使用new关键字。这也是Java中创建对象最简单直接的方式。示例代码:/***newanobject*@author:stacklength*@from:公众号Java技术栈*/@TestpublicvoidgirlFriend1(){GirlFriendgirlFriend=newGirlFriend("newanobject");系统。out.println(girlFriend);}输出结果:GirlFriend(name=newanobject)方法二:克隆一个对象。朋友有女朋友,而你没有。如果可能的话,克隆别人的女朋友,对吧?让girlfriend类先实现Cloneable接口,实现其clone()方法:/***girlfriend类*@author:stacklength*@from:公众号Java技术栈*/@Data@NoArgsConstructor@AllArgsConstructorclassGirlFriend实现可克隆{私有字符串名称;@OverrideprotectedObjectclone()抛出CloneNotSupportedException{returnsuper.clone();注意:这里的demo默认使用浅拷贝,即只克隆基本类型的字段,引用类型的字段需要重复写clone()方法手动赋值参考字段。现在克隆一个对象,示例代码:@TestpublicvoidgirlFriend2()throwsCloneNotSupportedException{GirlFriendgirlFriend1=newGirlFriend("Cloneanobject");GirlFriendgirlFriend2=(GirlFriend)girlFriend1.clone();System.out.println(girlFriend2);}输出结果:GirlFriend(name=cloninganobject)使用克隆的好处是可以快速创建一个与原对象具有相同值的对象,并且其字段值对象是相同的,但两个不同的引用。方法三:Class分发一个对象(反射)直接使用girlfriend类分发一个:/***Class分发一个对象*@author:stacklength*@from:公众号Java技术栈*/@TestpublicvoidgirlFriend3()抛出InstantiationException,IllegalAccessException{GirlFriendgirlFriend=GirlFriend.class.newInstance();girlFriend.setName("类分发一个对象");System.out.println(girlFriend);}输出结果:GirlFriend(name=classdistributesanobject)另外整理了最新最全的Java面试题,微信搜索Java面试库小程序来刷在线提问。方法四:动态加载一个对象(反射)知道girlfriend类在哪里(全类路径),但是没有加载,那就反射一个对象:/***反射一个对象*@author:stacklength*@from:公众号Java技术栈*/@TestpublicvoidgirlFriend4()throwsInstantiationException,IllegalAccessException,ClassNotFoundException{GirlFriendgirlFriend=(GirlFriend)Class.forName("cn.javastack.test.jdk.core.GirlFriend").newInstance();girlFriend.setName("反映一个对象");System.out.println(girlFriend);}输出结果:GirlFriend(name=reflectanobject)方法五:构造对象(反射)知道girlfriend类的结构,可以调用构造函数构造对象:/***构造一个对象*@author:stacklength*@from:公众号Java技术栈*/@TestpublicvoidgirlFriend5()throwsNoSuchMethodException,InvocationTargetException,InstantiationException,IllegalAccessException{GirlFriendgirlFriend=GirlFriend.class.getConstructor().新实例();girlFriend.setName("构造一个对象");System.out.println(girlFriend);}输出结果:GirlFriend(name=constructanobject)这里也可以同时结合类全路径构造对象。方法六:反序列化一个对象这类似于克隆。如果一个女朋友之前被序列化(保存)在磁盘上,现在可以反序列化了。我不会介绍Java序列化的基础知识。stackleader之前分享了很多,我整理了一下。大家可以在公众号Java技术栈菜单中阅读。首先让girlfriend可序列化,实现Serializable接口:/***girlfriendclass*@author:stacklength*@from:公众号Java技术栈*/@Data@NoArgsConstructor@AllArgsConstructorclassGirlFriendimplementsCloneable,Serializable{privatestaticfinallongserialVersionUID=1L;私有字符串名称;@OverrideprotectedObjectclone()抛出CloneNotSupportedException{returnsuper.clone();}}序列化/反序列化对象示例代码:/***反序列化一个对象*@author:Stacklength*@from:公众号Java技术栈*/@TestpublicvoidgirlFriend6()throwsIOException,ClassNotFoundException{GirlFriendgirlFriend1=newGirlFriend("反序列化一个对象");//序列化一个女朋友ObjectOutputStreamobjectOutputStream=newObjectOutputStream(newFileOutputStream("gf.obj"));objectOutputStream.writeObject(girlFriend1);objectOutputStream.close();//反序列化的ObjectInputStreamobjectInputStream="newObjectInputStream(newObjectInputStream(newObjectInputStream());GirlFriendgirlFriend2=(GirlFriend)objectInputStream.readObject();objectInputStream.close();System.out.println(girlFriend2);}输出结果:GirlFriend(name=deserializeanobject)总结本文完整示例代码已上传至Github:https://github.com/javastacks...欢迎学习来自Star,会持续更新的~如果你不喜欢自己用代码生成对象,也可以试试这首Java告白诗:我写了一首Java告白诗,女朋友不用担心!祝你们都成功,但是对方只是针对程序员的,不然你们是看不懂的。您还知道其他哪些创建对象的方法?欢迎留言讨论~!好了,今天的分享就到这里。稍后栈长会分享更多有趣的Java技术和最新的技术资料。关注公众号Java技术栈第一时间推送。我也会分享主流的Java面试题和参考答案。全部搞定后在公众号后台回复关键词“面试”刷题。最后,如果觉得我的文章对你有用,动动你的小手,送给正在看的人,转发吧,原创不易,楼主需要你的鼓励。版权声明:本文为公众号《Java技术栈》原创。转载、引用本文内容请注明出处。抄袭、洗稿均属侵权投诉,后果自负,并保留追究法律责任的权利。近期热点文章推荐:1.1000+Java面试题及答案(2022最新版)2.厉害了!Java协程来了。..3.SpringBoot2.x教程,太全面了!4.20w程序员红包封面,快拿。..5.《Java开发手册(嵩山版)》最新发布,赶快下载吧!感觉不错,别忘了点赞+转发!
