1、使用new关键字创建对象
2、使用Class类的newInstance方法创建对象
即使用Student student = Student.class.newInstance() 或 Student student = (Student)Class.forName("根路径.Student").newInstance()
3、使用Constructor类的newInstance方法创建对象
本方法和Class类的newInstance方法很像,java.lang.relect.Constructor类里也有一个newInstance方法可以创建对象
4、使用clone方法创建对象
用clone方法创建对象并不会调用任何构造函数。
要使用clone方法,我们需要先实现Cloneable接口并实现其定义的clone方法。
5、使用反序列化创建对象
当我们序列化和反序列化一个对象,jvm会给我们创建一个单独的对象。在反序列化时,jvm创建对象并不会调用任何构造函数。
为了反序列化一个对象,需要让类实现Serializable接口
总结:
用最简单的描述来区分new关键字和newInstance()方法的区别:
newInstance: 弱类型。低效率。只能调用无参构造。
new: 强类型。相对高效。能调用任何public构造。
newInstance( )是一个方法,而new是一个关键字,其次,Class下的newInstance()的使用有局限,因为它生成对象只能调用无参的构造函数,而使用new关键字生成对象没有这个限制。
Class.forName("")返回的是类
Class.forName("").newInstance()返回的是object
使用new关键字 | }→调用了构造函数 |
使用Class类的newInstance方法 | } →调用了构造函数 |
使用Constructor类的newInstance方法 | }→调用了构造函数 |
使用clone方法 | } →没有调用构造函数 |
使用反序列化 | } →没有调用构造函数 |