91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JAVA 枚舉單例模式及源碼分析的實例詳解

發布時間:2020-09-04 09:09:42 來源:腳本之家 閱讀:167 作者:lqh 欄目:編程語言

JAVA 枚舉單例模式及源碼分析的實例詳解

      單例模式的實現有很多種,網上也分析了如今實現單利模式最好用枚舉,好處不外乎三點:

1.線程安全

2.不會因為序列化而產生新實例

3.防止反射攻擊但是貌似沒有一篇文章解釋ENUM單例如何實現了上述三點,請高手解釋一下這三點:

       關于第一點線程安全,從反編譯后的類源碼中可以看出也是通過類加載機制保證的,應該是這樣吧(解決)

       關于第二點序列化問題,有一篇文章說枚舉類自己實現了readResolve()方法,所以抗序列化,這個方法是當前類自己實現的(解決)

       關于第三點反射攻擊,我有自己試著反射攻擊了以下,不過報錯了...看了下方的反編譯類源碼,明白了,因為單例類的修飾是abstract的,所以沒法實例化。(解決)

      以下是我寫的一個枚舉單例,以及其class文件反編譯過后的類

枚舉單例

public enum Singleton {
  INSTANCE {

    @Override
    protected void read() {
      System.out.println("read");
    }

    @Override
    protected void write() {
      System.out.println("write");
    }

  };
  protected abstract void read();
  protected abstract void write();
}

反編譯過后還原的類

public abstract class Singleton extends Enum
{

  private Singleton(String s, int i)
  {
    super(s, i);
  }

  protected abstract void read();

  protected abstract void write();

  public static Singleton[] values()
  {
    Singleton asingleton[];
    int i;
    Singleton asingleton1[];
    System.arraycopy(asingleton = ENUM$VALUES, 0, asingleton1 = new Singleton[i = asingleton.length], 0, i);
    return asingleton1;
  }

  public static Singleton valueOf(String s)
  {
    return (Singleton)Enum.valueOf(singleton/Singleton, s);
  }

  Singleton(String s, int i, Singleton singleton)
  {
    this(s, i);
  }

  public static final Singleton INSTANCE;
  private static final Singleton ENUM$VALUES[];

  static 
  {
    INSTANCE = new Singleton("INSTANCE", 0) {

      protected void read()
      {
        System.out.println("read");
      }

      protected void write()
      {
        System.out.println("write");
      }

    };
    ENUM$VALUES = (new Singleton[] {
      INSTANCE
    });
  }
}

以上就是JAVA 枚舉單例模式及源碼分析,如有疑問請留言或者到本站社區交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

丹东市| 南昌市| 凉城县| 徐闻县| 台中市| 荥经县| 建德市| 罗城| 信宜市| 台北县| 建宁县| 遵义市| 和田市| 万年县| 眉山市| 城固县| 台北县| 陕西省| 加查县| 神木县| 黑水县| 凤冈县| 青河县| 榆中县| 普兰县| 什邡市| 昭觉县| 延津县| 明光市| 庐江县| 斗六市| 成都市| 遂平县| 张家口市| 永仁县| 临颍县| 大同县| 茶陵县| 甘肃省| 临安市| 崇阳县|