Java 调用new和getInstance()之间的区别

Java 调用new和getInstance()之间的区别,java,abstract-class,Java,Abstract Class,调用Class.getInstance()是否等同于newclass()? 我知道后者调用了构造函数,但是getInstance()呢? 谢谢。当然(通常)不会。 getInstance是Java中常用的静态方法。new关键字实际上创建了一个新对象。在某种程度上,必须有一个new(尽管还有一些其他方法可以实例化新对象)来实际创建getInstance返回的对象。没有类#getInstance()这样的方法。你可能把它和我的名字搞混了。是的,这与默认构造函数上的new完全相同。以下是它的摘录: 创

调用
Class.getInstance()
是否等同于
newclass()
? 我知道后者调用了构造函数,但是
getInstance()
呢? 谢谢。

当然(通常)不会。


getInstance
是Java中常用的静态方法。
new
关键字实际上创建了一个新对象。在某种程度上,必须有一个
new
(尽管还有一些其他方法可以实例化新对象)来实际创建
getInstance
返回的对象。

没有
类#getInstance()
这样的方法。你可能把它和我的名字搞混了。是的,这与默认构造函数上的
new
完全相同。以下是它的摘录:

创建由该
对象表示的类的新实例该类被实例化,就好像是由一个带有空参数列表的
new
表达式实例化一样。
如果尚未初始化,则初始化该类

在代码中

Object instance = Object.class.newInstance();

Object instance = new Object();
Class#newInstance()
调用实际上遵循这种模式


更新:看到其他答案,我意识到你的问题有些含糊不清。实际上,使用名为
getInstance()
的方法的地方通常表示模式。它将使用
new
Class#newInstance()
创建并返回感兴趣的实例。这只是为了隐藏您可能不需要知道的关于具体实现的所有细节

此外,您还可以在模式的一些(主要是自主开发的)实现中经常看到这个方法名

另见:

在抽象类的上下文中,
getInstance()
方法可以表示抽象类。一个例子是抽象类,它包括静态工厂方法和一个具体的子类。

是的,这通常用于单例模式。当一个类只需要一个实例时,可以使用它。 最好使用getInstance(),因为此方法的实现可能会检查是否存在类的活动实例并返回它,而不是创建新实例。这样可以节省一些内存。如本例所示:

    public static DaoMappingManager getInstance() {
    DaoProperties daoProperties = null;
    try {
        daoProperties = (DaoProperties) DaoProperties.getInstance();
    } catch (PropertyException e) {
        e.printStackTrace();
    }
    return getInstance(daoProperties);
}

public static DaoMappingManager getInstance(DaoProperties daoProperties) {
    if (instance == null) {
        instance = new DaoMappingManager(daoProperties);
    }

    return instance;
}

某些抽象类具有getInstance()方法,因为您无法使用new关键字实例化抽象类。

有关开始:
newInstance()
是一种
静态方法
。这意味着您无需直接创建新类即可访问它!它“通过必要的初始化”(通过内部的
newmyclass()
)创建该类本身。这意味着您可以添加一些
newInstance
方法(newInstance4usage1,newInstance4usage2,…),以满足每个静态方法使用不同初始化创建类的不同需要。 有时,这有助于类的用户(最终程序员)创建类而不必担心,而且非常舒适

当init进程很复杂或具有重要或常见级别时,这确实很有帮助。此方法不阻止通过
new
关键字创建类

我喜欢



请原谅我回答慢,我正在用手机打字

事实上,他特别提到Class.getInstance(),所以我认为你第一个认为他困惑的想法是正确的。@Software:是的,但他添加了一个标签
抽象类
。模棱两可:)
Class#newInstance()
不是工厂方法模式
getInstance()
方法,如
Calendar.getInstance()
是Factory方法模式的完美示例。当工厂本身被抽象时,抽象工厂模式是不同的
DocumentBuilderFactory
就是一个例子。