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
| 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是弱类型、低效率的方式。它只能调用无参构造函数,即默认的构造函数。