一直在搞乱JFrames,我注意到了一些事情:
JFrame frame = new JFrame();
从我所知道的,可以说是完全相同的:
JFrame frame = JFrame.class.newInstance();
仅使用没有参数的默认实例时,这两种方式之间是否存在差异?
谢谢,
图例
答案 0 :(得分:1)
newInstance()
中的java.lang.Class
方法使用无参数构造函数构造类的实例 - 所以不,两个JFrame
将是相同的。
在运行时使用类名创建Class.newInstance()
对象时,Class
方法变得很重要 - 例如,从文件中读取类名。然后你可以说
String theClassName = ...;
Class clazz = Class.forName(theClassName);
Object o = clazz.newInstance();
现在,您有一个类的实例,在编译此代码时,该类的名称未知。如果您知道(按照惯例)命名类实现了某个接口或扩展了某个类,那么您可以将Object
强制转换为该接口或类,并以这种方式使用它。例如,servlet容器如配置文件中所述加载servlet,或者Web浏览器加载以HTML命名的applet。
答案 1 :(得分:0)
答案 2 :(得分:0)
newInstance()
会抛出两个必须处理的已检查异常,它会阻止编译器在你做错事时告诉你(比如尝试实例化一个抽象类)。
并且没有“默认实例”这样的东西。