1

我是 Android 的初学者程序员,我在互联网上找到了一些代码,但我无法理解这个“不打算实例化的类”是什么意思?!还有它有什么用。如果有人可以在这里提供帮助,我将非常高兴。

public class Settings
{
    //some code
    private Settings() {} // Class not meant to be instantiated
    //some code
}
4

7 回答 7

8

构造函数是私有的,所以只有类本身可以创建实例。这样做有几个原因。我的头顶上有一对...

  1. 该类是一个“实用程序”类,仅包含静态方法,因此实例化它没有任何意义。由于该类被评论为“类不打算被实例化”,我想这是最可能的原因。

  2. 类本身控制自己的生命周期并提供创建实例的方法。例如,如果该类是一个惰性单例,它可能会提供一个方法,该方法在第一次调用时创建一个实例,并在后续调用时返回该实例。

于 2013-08-20T13:10:05.503 回答
3

这个内部构造

private Settings() {}

Settings实例的构造函数。由于它是私有的,没有人可以访问它(在类本身之外),因此不能创建任何实例。

于 2013-08-20T13:03:58.013 回答
3

它是一个私有构造函数。这意味着外部类不能使用默认构造函数创建新实例。

更多信息

全部Objects都有Java一个默认构造函数

public MyObject() {}

这就是你如何拥有这个类:

public class MyObject{}

并且仍然可以调用:

MyObject mObj = new MyObject();

私人构造函数

有时开发人员可能不希望这个默认构造函数可见。添加任何其他构造函数将使此构造函数无效。这可以是带有空参数的声明构造函数(带有任何可见性修饰符),也可以是不同的构造函数。

在上述情况下,很可能遵循以下模型之一:

  1. Settings 对象在 Settings 类中被实例化,并且是所有代码运行的地方(一个通用模型Java——这样的类也包含一个static main(String[] args)方法)。

  2. Settings 对象具有其他公共构造函数。

  3. Settings 对象是一个Singleton,其中 Settings 对象的一个static​​实例通过访问器方法提供给 Objects 。例如:


public class MyObject {
    private static MyObject instance;
    private MyObject(){}//overrides the default constructor
    public static MyObject sharedMyObject() {
        if (instance == null)
            instance = new MyObject();//calls the private constructor
        return instance;
    }
}
于 2013-08-20T13:22:08.603 回答
1

构造函数是私有的,所以它不应该被类之外的任何东西调用

于 2013-08-20T13:04:09.127 回答
1

它不是嵌套类,而是构造函数。私有构造函数意味着您不能从外部构造此类的实例,如下所示:

Settings s = new Settings(); //Compilation error! :(

现在,如果一个类不能被实例化,它有什么用呢?最可能的原因是该类将从静态方法返回自身的实例,可能作为单例。这些设置通常对程序来说是全局的,所以单例模式非常适合这里。所以会有一个像这样的静态方法

static private TheOnlySettings = null;

static public getSettings()
{
    if(TheOnlySettings == null)
        TheOnlySettings = new Settings(); //Legal, since it's inside the Settings class
    return TheOnlySettings;
}

看看是不是真的这样。

于 2013-08-20T13:09:46.783 回答
0

正如其他人所提到的,不能从类外部实例化具有私有构造函数的类。在这种情况下可以使用静态方法。

class Demo
{

    private Demo()
    {
    }

 static void createObjects()
    {
       Demo o = new Demo();
    }

}

class Test
{
   public static void main (String ...ar)
{
    Demo.createObjects();
}

}
于 2013-08-20T13:49:38.283 回答
-1

我们可以有私有构造函数。下面的程序描述了使用带有静态函数的私有构造函数

class PrivateConstructor {
    private:
    PrivateConstructor(){
        cout << "constructor called" << endl;
    }
public:
    static void display() {
        PrivateConstructor();
    }
};
int main() {
    PrivateConstructor::display();
}
于 2021-06-28T13:27:59.637 回答