解释 Java 中的以下语句
Explaining the following statement in Java
我希望你们能帮助我解决这个程序中的以下问题。我是 java 的初学者,因此非常感谢对此的任何帮助:
这是什么意思?
private static Singleton singleton = new Singleton
我们要创建一个类型为 class 的变量吗?这种做法我在很多地方都见过。你能告诉我为什么我们用 Class 名称创建 variables/objects 吗?
这个"Singleton singleton "这是一个变量声明还是对象声明。
2)单例 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( );
}
Singleton tmp = Singleton.getInstance()
它不是另一个对象。它是 getInstance()
的另一个参考。那就是单例设计
单例
在整个 VM 运行期间,单个或相同对象维护 class。
refer here
第一个问题问这是什么意思:
private static Singleton singleton = new Singleton();
这同样可以写成:
private static Singleton myVariable = new Singleton();
当你看到Class class
时,这是一个变量声明。第一个字是变量的类型,第二个字是变量的名称。类型(或 class 名称)由编写 class 的人定义。变量名由您决定。 class 变量名全部小写是很常见的。
第二个问题,你问的是
Singleton tmp = Singleton.getInstance();
这里我们有一个名为 tmp 的 Singleton 类型的变量,它被初始化为函数调用的结果。函数调用是 Singleton.getInstance()
。这是一个 static
方法,这意味着您不需要 class 的实例来调用它。它只是 returns 对象,以便您可以访问它。
请注意,在第一种情况下,它使用 new Singleton()
初始化 private
变量。使用 new
会导致对象创建。在第二种情况下,没有对象创建。它要求 Singleton
class 给它一些已经创建的东西。
变量名只是一个名字。它不需要是任何东西。请阅读 this documentation. 惯例是驼峰式,首字母小写。但它可以是任何东西。与 class 名称或其他名称是否相同在功能方面没有区别。
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();
它们在功能上都是等价的。
至于变量与对象的问题,对象本质上是内存中某处有意义的值的集合,由一系列方法和字段等组成。每个 'live' 对象都有一个指向它的引用变量(告诉你它在内存中的位置),它是一个类型 = 对象的 class 的变量。在你的代码中,变量'singleton'指向'Singleton'class的一个对象,它是由构造方法new Singleton()
、方法getInstance()
returns 该 Singleton 对象在内存中的位置,因此您可以将它放在一个新变量中。 tmp 就是这种情况的一个例子,它是另一个变量,它保存对同一个 Singleton 对象的引用。
我希望你们能帮助我解决这个程序中的以下问题。我是 java 的初学者,因此非常感谢对此的任何帮助:
这是什么意思?
private static Singleton singleton = new Singleton
我们要创建一个类型为 class 的变量吗?这种做法我在很多地方都见过。你能告诉我为什么我们用 Class 名称创建 variables/objects 吗?
这个"Singleton singleton "这是一个变量声明还是对象声明。
2)单例 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( );
}
Singleton tmp = Singleton.getInstance()
它不是另一个对象。它是 getInstance()
的另一个参考。那就是单例设计
单例 在整个 VM 运行期间,单个或相同对象维护 class。 refer here
第一个问题问这是什么意思:
private static Singleton singleton = new Singleton();
这同样可以写成:
private static Singleton myVariable = new Singleton();
当你看到Class class
时,这是一个变量声明。第一个字是变量的类型,第二个字是变量的名称。类型(或 class 名称)由编写 class 的人定义。变量名由您决定。 class 变量名全部小写是很常见的。
第二个问题,你问的是
Singleton tmp = Singleton.getInstance();
这里我们有一个名为 tmp 的 Singleton 类型的变量,它被初始化为函数调用的结果。函数调用是 Singleton.getInstance()
。这是一个 static
方法,这意味着您不需要 class 的实例来调用它。它只是 returns 对象,以便您可以访问它。
请注意,在第一种情况下,它使用 new Singleton()
初始化 private
变量。使用 new
会导致对象创建。在第二种情况下,没有对象创建。它要求 Singleton
class 给它一些已经创建的东西。
变量名只是一个名字。它不需要是任何东西。请阅读 this documentation. 惯例是驼峰式,首字母小写。但它可以是任何东西。与 class 名称或其他名称是否相同在功能方面没有区别。
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();
它们在功能上都是等价的。
至于变量与对象的问题,对象本质上是内存中某处有意义的值的集合,由一系列方法和字段等组成。每个 'live' 对象都有一个指向它的引用变量(告诉你它在内存中的位置),它是一个类型 = 对象的 class 的变量。在你的代码中,变量'singleton'指向'Singleton'class的一个对象,它是由构造方法new Singleton()
、方法getInstance()
returns 该 Singleton 对象在内存中的位置,因此您可以将它放在一个新变量中。 tmp 就是这种情况的一个例子,它是另一个变量,它保存对同一个 Singleton 对象的引用。