Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >程序员如何优雅的过情人节?

程序员如何优雅的过情人节?

作者头像
老九君
发布于 2022-02-18 08:40:13
发布于 2022-02-18 08:40:13
35400
代码可运行
举报
文章被收录于专栏:老九学堂老九学堂
运行总次数:0
代码可运行

又到了普(sang)天(xin)同(bing)庆(kuang)的情人节了,情侣们又要开始一轮轰轰烈烈地秀恩爱。

对于程序员来说,“单身”依然是人生最大的 Bug,关键是还无法调试。

虽然俗话说“自古英雄多寂寞”,但是缺少另一半的人生总是不完整的。那么,程序员们如何优雅的过今年的情(nue)人(gou)节?

01普通版

一杯茶,一包烟,一个bug改一天。

02进阶版

情人节?朋友圈的节日怎么可能输?

03终极版

情人节是啥?产品明天上线

有座的各位肯定还有不少单身 dog 吧?

没关系!大雄教你创建对象的 6 种方式,从低端到高端,各种创建方式,总有一个适合你,没有对象的自己new一个吧!

创建对象的 6 种方式

假设有个女朋友类:

方法一:给自己new 一个对象

没对象咱就自己new 一个!

没错,使用 new 关键字,这也是 Java 创建对象最简单直接的方式了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * new一个对象
 */
@Test
public void girlFriend1() {
    GirlFriend girlFriend = new GirlFriend("new一个对象");
    System.out.println(girlFriend);
}

输出结果:

GirlFriend(name=new一个对象)

方法二:克隆一个对象

别人有对象,你没有,如果可以,把别人的女朋友克隆一个吧?

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * 女朋友类
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
class GirlFriend implements Cloneable {

   private String name;

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
    
}

注意:这里演示默认使用的是浅拷贝,即只克隆基本类型的字段,引用类型的需要再重写 clone() 方法手动赋下引用字段的值。

现在克隆一个对象:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Test
public void girlFriend2() throws CloneNotSupportedException {
    GirlFriend girlFriend1 = new GirlFriend("克隆一个对象");
    GirlFriend girlFriend2 = (GirlFriend) girlFriend1.clone();
    System.out.println(girlFriend2);
}

输出结果:

GirlFriend(name=克隆一个对象)

使用克隆的好处就是可以快速创建一个和原对象值一样的对象,对象的字段值一样,但是两个不同的引用。

方法三:类派发一个对象(反射)

直接使用女朋友类派发一个对象:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * 类派发一个对象
 */
@Test
public void girlFriend3() throws InstantiationException, IllegalAccessException {
    GirlFriend girlFriend = GirlFriend.class.newInstance();
    girlFriend.setName("类派发一个对象");
    System.out.println(girlFriend);
}

输出结果:

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * 反射一个对象
 */
@Test
public 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=反射一个对象)

方法五:构造一个对象(反射)

知道女朋友类的构造,就可以调用构造器构造一个对象:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * 构造一个对象
 */
@Test
public void girlFriend5() throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
    GirlFriend girlFriend = GirlFriend.class.getConstructor().newInstance();
    girlFriend.setName("构造一个对象");
    System.out.println(girlFriend);
}

输出结果:

GirlFriend(name=构造一个对象)

方法六:反序列化一个对象

这个和克隆的作用类似,假如以前序列化(保存)了一个女朋友在磁盘上,现在就可以反序列化出来。

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * 女朋友类
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
class GirlFriend implements Cloneable, Serializable {

    private static final long serialVersionUID = 1L;
    
    private String name;

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }

}

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * 反序列化一个对象
 */
@Test
public 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=反序列化一个对象)

如果你不喜欢用代码为自己生成的对象,你也可以试试用程序员独特的浪漫表白。

虽然很多人都说程序员不懂浪漫,只会敲代码,怪不得没有女朋友。但是!大雄想说,答应我找男朋友就找程序员好吗!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-02-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 老九学堂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验