再见,单身狗!Java创建对象的六种方式,总有一种适合你
背景
又到一年一度的情人节了,祝各位程序员有情人终成眷属!
情人节写点什么好呢?!
有座的各位肯定还有不少单身dog吧?
没关系,栈长本文教你创建对象的6种方式,从低端到高端,各种创建方式,总有一个适合你,没有对象的自己生成一个吧!
2022,一定脱单,再见单身狗!创建对象的6种方式
假设有个女朋友类:DataNoArgsConstructorAllArgsConstructorclassGirlFriend{privateStringname;}
注解使用的是Lombok框架注解,方便快速开发,不熟悉的阅读这篇文章:
推荐一款代码神器,代码量至少省一半!方法1:new一个对象
没对象就new一个吧,没错,使用new关键字,这也是Java创建对象最简单直接的方式了。
示例代码:new一个对象author:栈长from:公众号Java技术栈TestpublicvoidgirlFriend1(){GirlFriendgirlFriendnewGirlFriend(new一个对象);System。out。println(girlFriend);}
输出结果:
GirlFriend(namenew一个对象)方法2:克隆一个对象
朋友有女朋友,你没有,如果可以,把别人的女朋友克隆一个吧?
让女朋友类先实现Cloneable接口,并且实现其clone()方法:女朋友类author:栈长from:公众号Java技术栈DataNoArgsConstructorAllArgsConstructorclassGirlFriendimplementsCloneable{privateStringname;OverrideprotectedObjectclone()throwsCloneNotSupportedException{returnsuper。clone();}}
注意:这里演示默认使用的是浅拷贝,即只克隆基本类型的字段,引用类型的需要再重写clone()方法手动赋下引用字段的值。
现在克隆一个对象,示例代码:TestpublicvoidgirlFriend2()throwsCloneNotSupportedException{GirlFriendgirlFriend1newGirlFriend(克隆一个对象);GirlFriendgirlFriend2(GirlFriend)girlFriend1。clone();System。out。println(girlFriend2);}
输出结果:
GirlFriend(name克隆一个对象)
使用克隆的好处就是可以快速创建一个和原对象值一样的对象,对象的字段值一样,但是两个不同的引用。方法3:类派发一个对象
直接使用女朋友类派发一个吧:类派发一个对象author:栈长from:公众号Java技术栈TestpublicvoidgirlFriend3()throwsInstantiationException,IllegalAccessException{GirlFriendgirlFriendGirlFriend。class。newInstance();girlFriend。setName(类派发一个对象);System。out。println(girlFriend);}
输出结果:
GirlFriend(name类派发一个对象)
另外,最新最全的Java面试题整理好了,微信搜索Java面试库小程序在线刷题。方法4:反射一个对象
知道女朋友类在哪里(类全路径),但却没有被加载,那就反射一个对象吧:反射一个对象author:栈长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反射一个对象)方法5:构造一个对象
知道女朋友类的构造,就可以调用构造器构造一个对象:构造一个对象author:栈长from:公众号Java技术栈TestpublicvoidgirlFriend5()throwsNoSuchMethodException,InvocationTargetException,InstantiationException,IllegalAccessException{GirlFriendgirlFriendGirlFriend。class。getConstructor()。newInstance();girlFriend。setName(构造一个对象);System。out。println(girlFriend);}
输出结果:
GirlFriend(name构造一个对象)
这里也可以同时结合反射构造一个对象。方法6:反序列化一个对象
这个和克隆的作用类似,假如以前序列化(保存)了一个女朋友在磁盘上,现在就可以反序列化出来。
Java序列化基础就不介绍了,栈长之前分享不少,我也都整理好了,可以在公众号Java技术栈菜单中阅读。
首先让女朋友可序列化,实现Serializable接口:女朋友类author:栈长from:公众号Java技术栈DataNoArgsConstructorAllArgsConstructorclassGirlFriendimplementsCloneable,Serializable{privatestaticfinallongserialVersionUID1L;privateStringname;OverrideprotectedObjectclone()throwsCloneNotSupportedException{returnsuper。clone();}}
序列化反序列化对象示例代码:反序列化一个对象author:栈长from:公众号Java技术栈TestpublicvoidgirlFriend6()throwsIOException,ClassNotFoundException{GirlFriendgirlFriend1newGirlFriend(反序列化一个对象);序列化一个女朋友ObjectOutputStreamobjectOutputStreamnewObjectOutputStream(newFileOutputStream(gf。obj));objectOutputStream。writeObject(girlFriend1);objectOutputStream。close();反序列化出来ObjectInputStreamobjectInputStreamnewObjectInputStream(newFileInputStream(gf。obj));GirlFriendgirlFriend2(GirlFriend)objectInputStream。readObject();objectInputStream。close();System。out。println(girlFriend2);}
输出结果:
GirlFriend(name反序列化一个对象)总结
本文完整示例代码已上传Github:
https:github。comjavastacksjavastack
原文链接:https:developer。51cto。comarticle701328。html?utmsourcetuicoolutmmediumreferral