再见,单身狗!Java创建对象的方法有六种,总有一种适合你。今天公众号本来是有广告宣传的,暂时搁置了,唉。.这个情人节有点伤,还好对方没有鸽子。.情人节想写什么?!单身狗应该很多吧?没关系,堆栈管理器。本文将教你6种创建对象的方法,从低端到高端,总有一款适合你,没有对象就自己创建一个吧!2022年一定要脱单,再见单身!创建对象的6种方式假设有一个girlfriend类:@Data@NoArgsConstructor@AllArgsConstructorclassGirlFriend{privateStringname;}使用的注解是Lombok框架的注解,开发起来方便快捷。不熟悉的可以看看这篇文章:推荐一款打码神器,至少可以省一半的代码!方法一:新建如果没有对象,就新建一个。没错,使用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实现Cloneable{私有字符串名称;@OverrideprotectedObjectclone()抛出CloneNotSupportedException{returnsuper.clone();}}注意:这里的demo默认使用浅拷贝,即只克隆基本类型的字段,引用类型需要重写clone()方法,手动给引用的字段赋值。现在克隆一个对象,示例代码:@TestpublicvoidgirlFriend2()throwsCloneNotSupportedException{GirlFriendgirlFriend1=newGirlFriend("Cloneanobject");GirlFriendgirlFriend2=(GirlFriend)girlFriend1.clone();System.out.println(girlFriend2);}输出结果:GirlFriend(name=cloninganobject)使用克隆的好处是可以快速创建一个与原对象具有相同值的对象,并且其字段值对象是相同的,但两个不同的引用。方法三:按类分发一个对象使用girlfriend类直接分发一个:/***按类分发一个对象*@author:stacklength*@from:公众号Java技术栈*/@TestpublicvoidgirlFriend3()抛出InstantiationException,IllegalAccessException{GirlFriendgirlFriend=GirlFriend.class.newInstance();girlFriend.setName("类分配一个对象");System.out.println(girlFriend);}输出结果:GirlFriend(name=classassignsanobject)另外整理了最新最全的Java面试题,微信搜索Java面试库小程序刷题在线的。方法四:反射一个对象知道girlfriend类在哪里(类全路径),但是没有加载,那就反射一个对象:/***反射一个对象*@author:stacklength*@from:公众号Java技术栈*/@TestpublicvoidgirlFriend4()throwsInstantiationException,IllegalAccessException,ClassNotFoundException{GirlFriendgirlFriend=(GirlFriend)Class.forName("cn.javastack.test.jdk.core.GirlFriend").newInstance();女朋友。setName("反映一个对象");System.out.println(girlFriend);}输出结果:GirlFriend(name=reflectanobject)方法五:构造一个对象知道girlfriend类的构造,可以调用构造函数构造一个Object:/***Construct一个对象*@author:stacklength*@from:公众号Java技术栈*/@TestpublicvoidgirlFriend5()throwsNoSuchMethodException,InvocationTargetException,InstantiationException,IllegalAccessExceptiongirlFriend.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/javastack
