【问题标题】:What's the meaning of SomeObject.class in java? [duplicate]java中SomeObject.class的含义是什么? [复制]
【发布时间】:2013-12-14 02:38:14
【问题描述】:

例如,在双重检查锁定单例模式中,

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”是什么意思?它是一个对象吗?

现在我知道它是类对象,那么我们可以在这里使用其他对象来同步吗?比如“这个”?

【问题讨论】:

    标签: java singleton


    【解决方案1】:

    它代表该类的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)
    

    【讨论】:

    • 感谢详细解答!
    • @yuanliu200 不客气。大多数常见问题已经在 Stack 上得到解答,包括技术性更强的问题。最好在发布问题之前搜索它们。它节省了每个人的时间和精力。
    【解决方案2】:

    您正在“类”对象上进行同步。类对象包含一些“关于类”的数据。

    【讨论】:

      【解决方案3】:

      对于 JAVA 中的每个类,都存在一个对象。该对象是class 对象。 该对象为单例对象,可以通过Class object=ClassName.classClass object=Class.forName('ClassName');获取


      Read this for more details.

      对于您的代码synchronized (Singleton.class) 表示您正在锁定该类,因此静态成员访问是同步的。

      【讨论】:

      • 不是问题。 @yuanliu200
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-25
      • 2016-04-11
      • 2012-04-02
      • 2023-04-11
      • 2017-08-28
      • 2015-07-14
      • 1970-01-01
      相关资源
      最近更新 更多