i2i*_*eya 32 java reflection new-operator
new运营商和Class.forName(...).newInstance()?有什么区别?它们都创建了一个类的实例,我不确定它们之间的区别.
tem*_*def 52
在new操作创建一个是静态已知的(在编译时),并可以调用你想创建对象的任何构造一个类型的新对象.这是创建对象的首选方式 - 它很快,JVM对它进行了大量的积极优化.
Class.forName().newInstance()是一个动态构造,用于查找具有特定名称的类.它比使用慢,new因为对象的类型不能硬编码到字节码中,并且因为JVM可能必须进行权限检查以确保您有权创建对象.它也部分不安全,因为它总是使用零参数构造函数,如果你想要创建的对象没有一个无效的构造函数,它会抛出一个异常.
简而言之,new如果您在编译时知道要创建的对象类型,请使用.使用Class.forName().newInstance(),如果你不知道你会作出什么类型的对象.
And*_*s_D 11
Class.forName("your class name").newInstance() 如果需要动态实例化类,则非常有用,因为您不必对类名进行硬编码来创建对象.
想象一下从远程源动态加载类的场景.您将知道他们的名字,但无法在编译时导入它们.在这种情况下,您无法使用new创建新实例.这是(一个原因)Java提供该newInstance()方法的原因.
| 归档时间: |
|
| 查看次数: |
24062 次 |
| 最近记录: |