2016-06-13 11 views
1

私はIntegerCacheクラスを見ていますが、理解できない使用法があります。最後の行にprivateコンストラクタがありますが、目的を理解できません。それは何をするためのものか?プライベートコンストラクタは何をしますか?

private static class IntegerCache { 
    static final int low = -128; 
    static final int high; 
    static final Integer cache[]; 

    static { 
     // high value may be configured by property 
     int h = 127; 
     String integerCacheHighPropValue = 
     sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high"); 
     if (integerCacheHighPropValue != null) { 
      try { 
       int i = parseInt(integerCacheHighPropValue); 
       i = Math.max(i, 127); 
       // Maximum array size is Integer.MAX_VALUE 
       h = Math.min(i, Integer.MAX_VALUE - (-low) -1); 
      } catch(NumberFormatException nfe) { 
       // If the property cannot be parsed into an int, ignore it. 
      } 
     } 
     high = h; 

     cache = new Integer[(high - low) + 1]; 
     int j = low; 
     for(int k = 0; k < cache.length; k++) 
      cache[k] = new Integer(j++); 

     // range [-128, 127] must be interned (JLS7 5.1.7) 
     assert IntegerCache.high >= 127; 
    } 

    private IntegerCache() {} 
} 

答えて

3

これは、privateの空のコンストラクタであり、クラスのインスタンス化を妨げます。クラスは、その静的プロパティに対してのみ使用され、クラスのインスタンスは作成できません。

+0

私はそれを得る、ありがとう〜 –

3

デフォルトでは、Javaコンパイラは、のコンストラクタがない場合は空のpublicコンストラクタを挿入します。空のprivateコンストラクタを明示的に追加することによって、コンパイラはデフォルトコンストラクタを追加しません。またJLS-8.8.9. Default Constructor及び(部分的に)言うJLS-8.8.10. Preventing Instantiation of a Classを参照クラスがの生成を防止するために、少なくとも1つのコンストラクタを宣言したクラスのインスタンスを作成するから、クラス宣言外部コードを防止するように設計することができる

すべてのコンストラクタがprivateであると宣言することによって生成されます。

publicクラスは、少なくとも1つのコンストラクタを宣言し、publicのアクセス権を持つデフォルトのコンストラクタの作成を防止し、パブリックなコンストラクタを宣言することによって、パッケージ外のインスタンスの作成を防止することもできます。

+0

私はそれを得る、感謝〜 –

関連する問題