我在前四篇文章都讲了和序列化相关的东西,在第四篇文章中讲了通过实现Serializable,Cloneable这两个接口来实现深拷贝,但是一直有一个问题值得再讨论一下那就是:反序列化时对象是怎么创建的?
在第四篇文章中我们看到,不管通过实现Cloneable接口还是Serializable来进行深拷贝创建新对象时,都没有调用任何的构造函数进行创建对象,这看起来好像是jvm直接操作内存创建了对象。
我们知道java中创建对象的方式有如下三种:
- 通过new关键字创建对象,这个过程一定是需要调用构造函数的
- 反射Class.forName(classFullPathName).newInstance()创建对象,一定要调用默认的无参构造函数
- 通过反射Player.class.getConstructor(int.class,String.class).newInstance()创建对象,一定要调用相应的构造函数
可以运行如下的代码进行测试:
/**
*
* @author yujie.wang
*
*/
public class CreateObjectTest {