创建对象5种方式

使用new关键字

调用了构造函数

转变为2个调用:new调用、invoke special(构造函数调用)

1
Play p = new Play();

使用类的newInstance()

调用了构造函数,反射

转变为1个调用:invoke virtual(创建对象直接方法)

1 2
Play p = (Play)Class.forName("org.yyxx.demo.Play").newInstance(); Play p = Play.class.newInstance();

使用Constructor类的newInstance方法

调用了构造函数,反射

转变为1个调用:invoke virtual(创建对象直接方法)

1 2
Constructor<Play> c = Play.class.getConstructor(); Play p = c.newInstance();

使用clone()

实现Cloneable接口,实现自定义clone(),未调用构造函数

转变为1个调用:invoke virtual(创建对象直接方法)

1
Play p2 = p1.clone();

使用反序列化

实现Serializable接口,未调用构造函数

转变为1个调用:invoke virtual(创建对象直接方法)

1 2
ObjectInputStream in = new ObjectInputStream(new FileInputStream("data.obj")); Play p = (Play)in.readObject();

浙ICP备11005866号-12