1. 直接new
    调用了构造
  2. 通过反射
    调用了构造
  3. clone
    没有调用构造,但必须实现Cloneable接口,java通过native方法实现
  4. 反序列化
    没有调用构造,通过调用MethodAccessorGenerator#generateSerializationConstructor生成一个新的构造对象,该构造对象不会调用构造方法
  5. 通过Unsafe类的allocateInstance()方法
    没有调用构造,只分配内存空间