关于java:再见单身狗Java-创建对象的-6-种方式再也不用舔狗了

36次阅读

共计 3801 个字符,预计需要花费 10 分钟才能阅读完成。

背景

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

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

情人节写点什么好呢?!

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

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

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

创建对象的 6 种形式

假如有个女朋友类:

@Data
@NoArgsConstructor
@AllArgsConstructor
class GirlFriend {private String name;}

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

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

办法 1:new 一个对象

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

示例代码:

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

输入后果:

GirlFriend(name=new 一个对象)

办法 2:克隆一个对象

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

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

/**
 * 女朋友类
 * @author: 栈长
 * @from: 公众号 Java 技术栈
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
class GirlFriend implements Cloneable {

    private String name;

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

留神:这里演示默认应用的是浅拷贝,即只克隆根本类型的字段,援用类型的须要再重写 clone() 办法手动赋下援用字段的值。

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

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

输入后果:

GirlFriend(name= 克隆一个对象)

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

办法 3:类派发一个对象

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

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

输入后果:

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

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

办法 4:反射一个对象

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

/**
 * 反射一个对象
 * @author: 栈长
 * @from: 公众号 Java 技术栈
 */
@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= 反射一个对象)

办法 5:结构一个对象

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

/**
 * 结构一个对象
 * @author: 栈长
 * @from: 公众号 Java 技术栈
 */
@Test
public 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
@AllArgsConstructor
class 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 技术栈
 */
@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= 反序列化一个对象)

总结

本文残缺示例代码已上传 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 开发手册(嵩山版)》最新公布,速速下载!

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

正文完
 0