new 运算符和 Class.newInstance() 之间有什么区别?

2022-09-01 04:10:12

运算符 和 ?它们都创建了一个类的实例,我不确定它们之间的区别是什么。newClass.forName(...).newInstance()


答案 1

该运算符创建一个静态(在编译时)已知的类型的新对象,并且可以调用您尝试创建的对象上的任何构造函数。这是创建对象的首选方式 - 它很快,JVM对它进行了大量的积极优化。new

Class.forName().newInstance()是一个动态构造,用于查找具有特定名称的类。它比使用慢,因为对象的类型不能硬编码到字节码中,并且因为JVM可能必须进行权限检查以确保您有权创建对象。它也部分不安全,因为它始终使用零参数构造函数,如果您尝试创建的对象没有空构造函数,则会引发异常。new

简而言之,如果您在编译时知道要创建的对象的类型,请使用。如果您不知道要制作什么类型的对象,请使用。newClass.forName().newInstance()


答案 2

Class.forName("your class name").newInstance()如果需要动态实例化类,则非常有用,因为不必对类名进行硬编码即可创建对象。

想象一下,您从远程源动态加载类。您将知道它们的名称,但无法在编译时导入它们。在这种情况下,您不能 用于创建新实例。这就是Java提供这种方法的(一个原因)。newnewInstance()