背景

又到一年一度的情人节了,祝各位程序员有情人终成眷属!

明天公众号原本有个广告推广的,被长期鸽了,唉。。这个情人节有点伤,还好对象没鸽。。

情人节写点什么好呢?!

有座的各位必定还有不少独身 dog 吧?

没关系,栈长本文教你创建对象的 6 种形式,从低端到高端,各种创立形式,总有一个适宜你,没有对象的本人生成一个吧!

2022,肯定脱单,再见独身狗!

创建对象的 6 种形式

假如有个女朋友类:

@Data@NoArgsConstructor@AllArgsConstructorclass GirlFriend {    private String name;}

注解应用的是 Lombok 框架注解,不便疾速开发,不相熟的浏览这篇文章:

举荐一款代码神器,代码量至多省一半!

办法1:new 一个对象

没对象就 new 一个吧,没错,应用 new 关键字,这也是 Java 创建对象最简略间接的形式了。

示例代码:

/** * new一个对象 * @author: 栈长 * @from: 公众号Java技术栈 */@Testpublic void girlFriend1() {    GirlFriend girlFriend = new GirlFriend("new一个对象");    System.out.println(girlFriend);}

输入后果:

GirlFriend(name=new一个对象)

办法2:克隆一个对象

敌人有女朋友,你没有,如果能够,把他人的女朋友克隆一个吧?

让女朋友类先实现 Cloneable 接口,并且实现其 clone() 办法:

/** * 女朋友类 * @author: 栈长 * @from: 公众号Java技术栈 */@Data@NoArgsConstructor@AllArgsConstructorclass GirlFriend implements Cloneable {    private String name;    @Override    protected Object clone() throws CloneNotSupportedException {        return super.clone();    }    }
留神:这里演示默认应用的是浅拷贝,即只克隆根本类型的字段,援用类型的须要再重写 clone() 办法手动赋下援用字段的值。

当初克隆一个对象,示例代码:

@Testpublic void girlFriend2() throws CloneNotSupportedException {    GirlFriend girlFriend1 = new GirlFriend("克隆一个对象");    GirlFriend girlFriend2 = (GirlFriend) girlFriend1.clone();    System.out.println(girlFriend2);}

输入后果:

GirlFriend(name=克隆一个对象)

应用克隆的益处就是能够疾速创立一个和原对象值一样的对象,对象的字段值一样,然而两个不同的援用。

办法3:类派发一个对象

间接应用女朋友类派发一个吧:

/** * 类派发一个对象 * @author: 栈长 * @from: 公众号Java技术栈 */@Testpublic void girlFriend3() throws InstantiationException, IllegalAccessException {    GirlFriend girlFriend = GirlFriend.class.newInstance();    girlFriend.setName("类派发一个对象");    System.out.println(girlFriend);}

输入后果:

GirlFriend(name=类派发一个对象)

另外,最新最全的 Java 面试题整顿好了,微信搜寻Java面试库小程序在线刷题。

办法4:反射一个对象

晓得女朋友类在哪里(类全门路),但却没有被加载,那就反射一个对象吧:

/** * 反射一个对象 * @author: 栈长 * @from: 公众号Java技术栈 */@Testpublic void girlFriend4() throws InstantiationException, IllegalAccessException, ClassNotFoundException {    GirlFriend girlFriend = (GirlFriend) Class.forName("cn.javastack.test.jdk.core.GirlFriend").newInstance();    girlFriend.setName("反射一个对象");    System.out.println(girlFriend);}

输入后果:

GirlFriend(name=反射一个对象)

办法5:结构一个对象

晓得女朋友类的结构,就能够调用结构器结构一个对象:

/** * 结构一个对象 * @author: 栈长 * @from: 公众号Java技术栈 */@Testpublic void girlFriend5() throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {    GirlFriend girlFriend = GirlFriend.class.getConstructor().newInstance();    girlFriend.setName("结构一个对象");    System.out.println(girlFriend);}

输入后果:

GirlFriend(name=结构一个对象)

这里也能够同时联合反射结构一个对象。

办法6:反序列化一个对象

这个和克隆的作用相似,如果以前序列化(保留)了一个女朋友在磁盘上,当初就能够反序列化进去。

Java 序列化根底就不介绍了,栈长之前分享不少,我也都整顿好了,能够在公众号Java技术栈菜单中浏览。

首先让女朋友可序列化,实现 Serializable 接口:

/** * 女朋友类 * @author: 栈长 * @from: 公众号Java技术栈 */@Data@NoArgsConstructor@AllArgsConstructorclass GirlFriend implements Cloneable, Serializable {    private static final long serialVersionUID = 1L;        private String name;    @Override    protected Object clone() throws CloneNotSupportedException {        return super.clone();    }}

序列化/反序列化对象示例代码:

/** * 反序列化一个对象 * @author: 栈长 * @from: 公众号Java技术栈 */@Testpublic void girlFriend6() throws IOException, ClassNotFoundException {    GirlFriend girlFriend1 = new GirlFriend("反序列化一个对象");    // 序列化一个女朋友    ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream("gf.obj"));    objectOutputStream.writeObject(girlFriend1);    objectOutputStream.close();    // 反序列化进去    ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream("gf.obj"));    GirlFriend girlFriend2 = (GirlFriend) objectInputStream.readObject();    objectInputStream.close();    System.out.println(girlFriend2);}

输入后果:

GirlFriend(name=反序列化一个对象)

总结

本文残缺示例代码已上传 Github:

https://github.com/javastacks...

欢送 Star 学习,后续会继续更新~

如果你不喜爱用代码为本人生成对象,你也能够试试这首 Java 表白诗:

写了一首 Java 表白诗,女朋友不愁了!

祝大家胜利,不过对方仅限程序员,不然会看不懂的。

你还晓得哪些创建对象的形式呢?欢送留言探讨~!

好了,明天的分享就到这里了,前面栈长会分享更多好玩的 Java 技术和最新的技术资讯,关注公众号Java技术栈第一工夫推送,我也将支流 Java 面试题和参考答案都整顿好了,在公众号后盾回复关键字 "面试" 进行刷题。

最初,感觉我的文章对你用播种的话,动动小手,给个在看、转发,原创不易,栈长须要你的激励。

版权申明: 本文系公众号 "Java技术栈" 原创,转载、援用本文内容请注明出处,剽窃、洗稿一律投诉侵权,后果自负,并保留追究其法律责任的权力。

近期热文举荐:

1.1,000+ 道 Java面试题及答案整顿(2022最新版)

2.劲爆!Java 协程要来了。。。

3.Spring Boot 2.x 教程,太全了!

4.20w 程序员红包封面,快快支付。。。

5.《Java开发手册(嵩山版)》最新公布,速速下载!

感觉不错,别忘了顺手点赞+转发哦!