共计 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 开发手册(嵩山版)》最新公布,速速下载!
感觉不错,别忘了顺手点赞 + 转发哦!