知道的越多,不知道的越多

0%

JAVA创建对象的几种方式

Java中面向对象的编程思想贯穿整个语言,使用对象的前提就是要知道该如何创建对象。以下总结了创建对象的几种方式:

关键字 “new”

关键字”new“是学习java接触到创建对象最简单的方式,首先拥有一个GirlFriend类

1
2
3
4
5
6
7
8
9
10
11
12
public class GirlFriend {
private String name;
private int age;

public GirlFriend() {
}

public GirlFriend(String name, int age) {
this.name = name;
this.age = age;
}
}

此时便可以通过new关键词创建出一个GirlFriend对象,在JAVA里拥有一个对象就是这么简单,不过对象都要上交给Spring了(手动狗头)。

1
2
3
public static void main(String[] args) {
GirlFriend girlFriend = new GirlFriend();
}

new是强类型方式,能够调用任何public构造,相对高效。

clone

Object类中定义了clone方法,可以通过对象的clone方法复制出一个对象出来。默认的clone方法是浅拷贝,如果需要实现深拷贝,需要在类中手动重写clone方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// 类需要实现Cloneable接口
public class GirlFriend implements Cloneable {
private String name;
private int age;

public GirlFriend() {
}

public GirlFriend(String name, int age) {
this.name = name;
this.age = age;
}

public static void main(String[] args) {
GirlFriend girl1 = new GirlFriend("honey", 60);
try {
GirlFriend girl2 = (GirlFriend) girl1.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
}
}

反序列化

Java反序列化是一个能够将字节序列恢复为Java对象的过程。为了实现反序列化,GirlFriend类需要实现Serializable接口。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class GirlFriend implements Serializable {
private static final long serialVersionUID = -5809782578272943999L;
private String name;
private int age;

public GirlFriend() {
}

public GirlFriend(String name, int age) {
this.name = name;
this.age = age;
}

public static void main(String[] args) throws IOException, ClassNotFoundException {
GirlFriend girl = new GirlFriend("honey", 60);

// 序列化
ObjectOutputStream oo = new ObjectOutputStream(new FileOutputStream(new File("./girl.txt")));
oo.writeObject(girl);
oo.close();

// 反序列化
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(
new File("./girl.txt")));
GirlFriend girl2 = (GirlFriend) ois.readObject();
ois.close();
}
}

反射

在运行状态中,Java的反射机制能够知道任何一个类中拥有的方法和属性。通过反射能够调用对象的方法和属性。
在获取Class类型之后,可以根据Class类的newInstance()方法,创建该类的对象

1
2
3
4
public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
Class name = Class.forName("com.xinfu.GirlFriend");
GirlFriend girlFriend = (GirlFriend) name.newInstance();
}

需要注意的是,newInstanfce是弱类型、低效率的方式。它只能调用无参构造函数,即默认的构造函数。

欢迎关注我的其它发布渠道