常规创建方式:

使用new关键字 } → 调用了构造函数
使用Class类的newInstance方法 } → 调用了构造函数
使用Constructor类的newInstance方法 } → 调用了构造函数
使用clone方法 } → 没有调用构造函数
使用反序列化 } → 没有调用构造函数

非常规的创建方式

  1. 使用Class.forName(“sun.misc.Unsafe”),这是sun公司没有开源的API,需要手动分配内存,释放内存,无法GC,可以实现许多功能
  2. 使用 ObjectStreamClass.class.getDeclaredMethod(“getConstructorId”, Class.class);,到内存中找是否已经构件过此类
  3. 使用ObjectInputStream.class .getDeclaredMethod(“newInstance”, Class.class, Class.class);,和上一个方法实现功能相同

这些方法都不调用构造函数创建对象