2013-11-28 41 views
0

例如,在雙重檢查鎖定單例模式,java中SomeObject.class的含義是什麼?

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」的含義是什麼?它是一個對象嗎?

現在我知道它是類對象,那麼我們可以使用其他對象來同步嗎?如「這個」?

回答

1

對於JAVA中的每個類,都存在一個對象。該對象是一個class對象。 這個對象是單身的對象,可以通過Class object=ClassName.classClass object=Class.forName('ClassName');


Read this for more details.

要取回您的代碼synchronized (Singleton.class)意味着你鎖定的類,使靜態成員訪問sychronized。

+0

明白了,謝謝! – computerscience99

+0

不是問題。 @ yuanliu200 –

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) 
+0

感謝您的詳細解答! – computerscience99

+0

@ yuanliu200不客氣。大多數常見問題已經在Stack上得到了回答,包括技術性較強的問題。在發佈問題之前搜索它們是很好的。它節省了每個人的時間和精力。 –

1

正在同步的「類「對象。類對象包含一些「關於類」的數據。