單例 反射 列舉

2021-09-11 05:18:54 字數 587 閱讀 3980

單例模式:

① 構造方法私有

② 提供公開的靜態方法返回該類唯一的例項

反射:jvm在進行類載入時,會產生類對應的類物件

類物件:包含了乙個類所有資訊的物件

類的物件:根據類的類物件包含的資訊建立出來的物件

jvm拿到類物件可以建立類的物件、訪問屬性、呼叫方法

所有的類物件都是class型別的物件,該型別的物件包含某乙個類的資訊。

獲取類物件的3種方式:

① 類名.class

② 類的物件.getclass();

③ class.forname("全類名");

反射作用:

① 操作私有成員

② 可以寫出更加通用的**

③ 真正的解耦合

④ 使得框架的**和後寫的業務**無縫結合

列舉:特殊的類,該型別的物件是預先建立好的,不能新建該型別的物件。

① 列舉類中的列舉值,既是列舉型別的物件又是列舉的公開靜態常量屬性。

② 列舉中列舉值的定義,必須是第一行語句。

③ 列舉中的構造方法預設私有

④ 列舉中可以定義抽象方法,那麼列舉值就只能作為列舉類的匿名子類物件

列舉單例模式如何防止反射攻擊

關於單例模式,相信大家都所有了解,比較經典的實現有餓漢式 借助內部類 雙重鎖檢測,這些實現可以保證執行緒安全,但是在某些特殊情況下並不能夠保證僅僅只有乙個單例,因為像序列化 反射攻擊等往往可以生成新的例項物件,本文將重點分析列舉單例模式如何防止反射攻擊。列舉單例 public enum single...

單例模式之列舉單例

列舉也是餓漢式。列舉單例 問題1 列舉單例是如何限制例項個數的 反編譯後可以看到 就是我們列舉類的乙個靜態成員變數而已,單例項的 問題2 列舉單例在建立時是否有併發問題 沒有,因為它也是靜態成員變數,它的執行緒安全性也是在類載入階段完成的。那個時候不會有執行緒併發問題 問題3 列舉單例能否被反射破壞...

利用列舉解決java反射對單例的破壞

定義列舉 enum type b c d public abstract string gettype 列舉可以重寫gettype 方法,可以根據各個列舉自己的業務重寫該方法。下面貼出本人的 工具類 public class toloweroperation implements ioperatio...