再见,单身狗!Java 创建对象的六种方式,总有一种适合你......

背景

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

今天公众号本来有个广告推广的单身,被临时鸽了,建对唉。式总适合。有种这个情人节有点伤,再见种方还好对象没鸽。单身。建对

再见,单身狗!Java 创建对象的六种方式,总有一种适合你......

情人节写点什么好呢?式总适合!

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

没关系,栈长本文教你创建对象的有种 6 种方式,从低端到高端,再见种方各种创建方式,单身总有一个适合你,建对没有对象的式总适合自己生成一个吧!

2022,一定脱单,有种再见单身狗!

创建对象的 6 种方式

假设有个女朋友类:

@Data

@NoArgsConstructor

@AllArgsConstructor

class GirlFriend {

private String name;

}

注解使用的是 Lombok 框架注解,方便快速开发,不熟悉的云南idc服务商阅读这篇文章:

推荐一款代码神器,代码量至少省一半!

方法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/javastack​​

应用开发
上一篇:E52650处理器的性能和特点分析(探索E52650处理器的卓越性能和先进功能)
下一篇:1.下载获取字体并解压安装对于开源操作系统而言,Ubuntu平台默认自带很多字体。但通常情况下用户或许对已有字体并不能满足需要。因此,类似Windows系统一样,用户可以在Ubuntu 14.04、14.10或者像Linux Mint之类系统中安装额外的字体。步骤一: 获取字体首先,下载你所选择的字体。用户会现在你或许在考虑下载字体,通过搜索引擎可以给你提供几个免费的字体网站。用户可以先去看看Lost Type的字体(点击下载),Squirrel也是一个下载字体的网站(点击下载),用户都可以从这两个网站找的需要新字体。步骤二:Ubuntu中安装新字体对于用户来讲,下载的字体文件可能是一个压缩包,先解压它大多数字体文件格式是TTF (TrueType字体) 或者OTF (OpenType字体)。无论是哪种格式,双击字体文件后会自动用字体查看器打开。这里用户可以在右上角看到安装选项。值得注意的是:在安装字体时不会看到其他信息。几秒钟后会看到状态变成已安装,表示字体已经安装完毕。安装完毕后,用户就可以在GIMP、Pina等应用中看到你新安装的字体。2.在Ubuntu上一次安装多字体要在Ubuntu中一次安装多个字体,需要在home目录下创建一个.fonts文件夹(假如它不存在的话),并把解压后的TTF和OTF文件复制到这个文件夹内。在文件管理器中进入home目录。按下Ctrl+H 显示Ubuntu中的隐藏文件,右键创建一个文件夹并命名为.fonts。 值得提醒的是在Linux中,文件前面加上“.”意味在普通的视图中都会隐藏。另外,用户可以通过安装字体管理程序,在图形用户界面管理字体。要在Ubuntu中安装字体管理程序,打开终端并输入下面的命令:要卸载字体管理器,使用下面的命令:在此推荐一下文泉驿正黑字体作为具体示例~上图是在 Xubuntu 14.04 自带文本编辑器 Mousepad 里的字体效果。喜欢锐利清晰字体的 Ubuntu 用户,可以安装文泉驿正黑: 复制代码代码如下:sudo apt-get install fonts-wqy-zenhei 然后在系统字体设置里应用“文泉驿点阵正黑”字体即可。