我是Android的初级程序员,我在互联网上找到了一些代码,我无法得到这个“不打算实例化的类”的意思?!还有什么用途呢。如果有人可以帮到我,我会很高兴。
public class Settings
{
//some code
private Settings() {} // Class not meant to be instantiated
//some code
}
答案 0 :(得分:8)
构造函数是私有的,因此只有类本身才能创建实例。这样做有几个原因。一对夫妇脱离了我的头顶......
该类是一个“实用程序”类,只包含静态方法,因此实例化它是没有意义的。由于该课程被评论为“不打算实例化的课程”,我想这是最可能的原因。
类本身控制自己的生命周期,并提供创建实例的方法。例如,如果类是一个惰性单例,它可能会提供一个在第一次调用时创建实例的方法,并在后续调用时返回此实例。
答案 1 :(得分:3)
这个内部构造
private Settings() {}
是Settings
个实例的构造函数。由于它是私有的,没有人可以访问它(在类本身之外),因此不能创建实例。
答案 2 :(得分:2)
这是一个私人构造函数。这意味着外部类无法使用默认构造函数创建新实例。
Objects
中的所有Java
都有默认构造函数:
public MyObject() {}
这就是你可以拥有这个课程的方法:
public class MyObject{}
仍可以致电:
MyObject mObj = new MyObject();
有时开发人员可能不希望此默认构造函数可见。添加任何其他构造函数将使此构造函数无效。这可以是具有空参数的声明构造函数(使用任何可见性修饰符),也可以是一个不同的构造函数。
在上述情况中,可能会遵循以下模型之一:
Settings对象在Settings类中实例化,并且是运行所有代码的地方(Java
的通用模型 - 其中这样的类还包含static main(String[] args)
方法)
Settings对象具有其他公共构造函数。
Settings对象是Singleton
,通过访问器方法向对象提供一个{Object}对象的static
实例。例如:
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;
}
}
答案 3 :(得分:1)
构造函数是私有的,因此它并不意味着被类外的任何东西调用
答案 4 :(得分: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;
}
看看情况确实如此。
答案 5 :(得分:0)
正如其他人所提到的,具有私有构造函数的类无法从类外部实例化。在这种情况下可以使用静态方法。
class Demo
{
private Demo()
{
}
static void createObjects()
{
Demo o = new Demo();
}
}
class Test
{
public static void main (String ...ar)
{
Demo.createObjects();
}
}
答案 6 :(得分:-1)
我们可以拥有私有构造函数。下面的程序描述了使用带有静态函数的私有构造函数
class PrivateConstructor {
private:
PrivateConstructor(){
cout << "constructor called" << endl;
}
public:
static void display() {
PrivateConstructor();
}
};
int main() {
PrivateConstructor::display();
}