我希望你们能帮我解决这个项目中的以下问题。我是java的初学者,所以对此有任何帮助表示感谢:
这意味着什么?
private static Singleton singleton = new Singleton
我们是否正在创建一个类型为class的变量。我见过很多地方这种做法。你能告诉我为什么我们用类名创建变量/对象吗?
这个" Singleton单身"这是一个变量声明或对象声明。
2)Singleton tmp = Singleton.getInstance()
有人能帮助我们在这做什么吗?我们创造了另一个对象" tmp"对?右边的陈述是做什么的?
public class Singleton {
private static Singleton singleton = new Singleton();
/* A private Constructor prevents any other
* class from instantiating.
*/
private Singleton() {}
/* Static 'instance' method */
public static Singleton getInstance() {
return singleton;
}
/* Other methods protected by singleton-ness */
protected static void demoMethod() {
System.out.println("demoMethod for singleton");
}
}
文件:SingletonDemo.java
public class SingletonDemo {
public static void main(String[] args) {
Singleton tmp = Singleton.getInstance( );
tmp.demoMethod( );
}
答案 0 :(得分:3)
第一个问题是什么意思:
private static Singleton singleton = new Singleton();
这同样可以写成:
private static Singleton myVariable = new Singleton();
当你看到Class class
时,它是一个变量声明。第一个单词是变量的类型,第二个单词是变量的名称。类型(或类名)由编写类的人定义。变量名由您自己决定。将变量名称的全部小写名称全部用于。
关于第二个问题,你问一下
Singleton tmp = Singleton.getInstance();
这里我们有一个名为 tmp 的变量 Singleton ,它被初始化为函数调用的结果。函数调用是Singleton.getInstance()
。这是一个static
方法,这意味着您不需要该类的实例来调用它。它只返回对象,以便您可以访问它。
请注意,在第一种情况下,它使用private
初始化new Singleton()
变量。使用new
会导致创建对象。在第二种情况下,没有对象创建。它要求Singleton
类给它一些已经创建的东西。
答案 1 :(得分:1)
变量名称只是一个名称。它没有要求任何东西。请阅读this documentation.惯例是以驼峰式,小写的第一个字母。但它可以是任何东西。它在功能方面没有区别,无论它是否与类名或其他名称相同。
private static Singleton singleton = new Singleton();
与
没有区别private static Singleton Singleton = new Singleton(); // Bad style
private static Singleton s = new Singleton();
private static Singleton xyz = new Singleton();
所有功能都相同。
答案 2 :(得分:0)
Singleton tmp = Singleton.getInstance()
它不是另一个对象。这是getInstance()
的另一个参考。这是单身设计
<强>的Singleton 强> 在VM的运行时间内为类维护单个或相同的对象。 refer here
答案 3 :(得分:0)
对于变量vs对象问题,对象本质上是内存中某个有意义值的集合,其中包括方法和字段列表等。每个'live'对象都有一个指向它的引用变量(告诉你它在内存中的位置),它是一个变量,其类型=对象的类。在您的代码中,变量'singleton'指向由构造函数方法new Singleton()
创建的'Singleton'类的对象,方法getInstance()
返回该Singleton对象的内存中的位置,所以你可以把它放在一个新的变量中。 tmp就是这种情况的一个例子,它是另一个保存对同一个Singleton对象的引用的变量。