例如,在双重检查锁定单例模式中,
public class Singleton {
private volatile static Singleton uniqueInstance;
private Singleton() {}
public static Singleton getInstance() {
if (uniqueInstance == null) {
synchronized (Singleton.class) {
if (uniqueInstance == null) {
uniqueInstance = new Singleton();
}
}
}
return uniqueInstance;
}
}
“Singleton.class”的含义是什么?它是一个对象吗?
现在我知道它是类对象,那么我们可以在这里使用其他对象进行同步吗?比如“这个”?
答案 0 :(得分:4)
它表示该类的Class
对象。获得Class
对象后,您可以执行许多操作,例如获取类的字段,类的方法,类的包等等。
最常见的是,您将使用它来获取资源作为流。也就是说,当您想从jar文件中检索嵌入的资源时。有关更多详细信息,请have a look at the documentation
直接在以下位置运行以下代码:http://ideone.com/h1czR5
SSCCE
/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
import java.lang.reflect.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
Class string = String.class;
System.out.println("Package: " + string.getPackage());
System.out.println("Fields: " + java.util.Arrays.toString(string.getFields()));
Method[] methods = string.getMethods();
for(int i = 0; i < 10; i++){
System.out.println(methods[i]);
}
}
}
输出
Package: package java.lang, Java Platform API Specification, version 1.7
Fields: [public static final java.util.Comparator java.lang.String.CASE_INSENSITIVE_ORDER]
public boolean java.lang.String.equals(java.lang.Object)
public java.lang.String java.lang.String.toString()
public int java.lang.String.hashCode()
public int java.lang.String.compareTo(java.lang.Object)
public int java.lang.String.compareTo(java.lang.String)
public int java.lang.String.indexOf(java.lang.String,int)
public int java.lang.String.indexOf(int)
public int java.lang.String.indexOf(int,int)
public int java.lang.String.indexOf(java.lang.String)
public static java.lang.String java.lang.String.valueOf(float)
答案 1 :(得分:1)
您正在同步“class”对象。类对象包含一些“关于类”的数据。
答案 2 :(得分:1)
对于JAVA中的每个类,都存在一个对象。该对象是class
对象。
此对象是单例对象,可以由Class object=ClassName.class
或Class object=Class.forName('ClassName');
对于您的代码synchronized (Singleton.class)
意味着您正在锁定该类,以便静态成员访问被同步。