使類和成員的可訪問性更小 (13)

一、好的設計模塊與壞的設計模塊java

  • 是否隱藏內部數據和其餘實現細節
  • API與實現,清晰隔離開
  • 模塊之間經過API通訊
  • 信息隱藏或封裝是軟件設計的基本原則之一

二、信息隱藏很是重要數組

  • 能夠有效地解除系統各個模塊之間的耦合關係
  • 使得各個模塊獨立開發、測試、優化、使用、理解、修改
  • 加快系統開發速度
  • 減小維護負擔

三、信息隱藏自己不會帶來好的性能,可是能夠有效調節安全

  • 一旦系統完成,能夠分模塊性能測試,肯定影響性能模塊,單獨優化

四、信息隱藏提升了軟件的可重用性性能

  • 下降了構建大型系統風險
  • 即便整個系統不可用,有些獨立模塊也是可用的

五、java 提供了許多機制來協助隱藏信息測試

  • 訪問控制,決定了類、接口和成員的可訪問性
  • 實體的可訪問性由其聲明所在的位置,以及實體聲明中所出現的訪問修飾符共同決定
  • 正確使用這些修飾符對信息隱藏很是關鍵

六、第一規則:儘量使每一個類或成員不被外界訪問優化

  • 應該寫與你所編寫內容一致,儘量小的訪問權限

七、對於頂層的類(非嵌套類)和接口,只有兩種可能的訪問級別線程

  • 包級私有:非public 修飾,成爲實現的一部分,內部修改優化,外界不感知
  • 公有:public 修飾,API一部分,有責任一直維護,以保持兼容

八、一個頂層包級私有類,若是僅僅在一個類的內部被使用到設計

  • 考慮讓其成爲內部嵌套類

九、下降沒必要要公有類的可訪問性,比下降包級私有頂層類更重要的多對象

  • 由於公有類是API的一部分

十、對於成員(域、嵌套類、嵌套接口、方法),有四中訪問級別接口

  • 私有、包級私有是實現的一部分,不該該影響導出的API

(1)私有的(private):只有在聲明該成員的頂層類內部纔可訪問

(2)包級私有(缺省修飾符):聲明該成員的包內部的任何類均可以訪問

(3)受保護的(protected):聲明該成員類的子類能夠訪問,包內部也均可以訪問

(4)公有的(public):任何地方均可以訪問

十一、公有類的成員,從私有變成保護級別,會大大加強可訪問性

  • 保護成員是其導出API一部分,必須一直支持
  • 受保護成員也成了該類對某個實現細節的公開承諾,
  • 受保護成員儘可能少用

十二、若是一個方法覆蓋了父類的一個方法,子類的訪問級別就不能低於超類的訪問級別

  • 違反該規則,編譯器會報錯
  • 若是一個類實現了一個接口,那麼全部接口方法,類都要聲明爲公有的
  • 接口種方法都隱含着公有訪問級別

1三、實例域毫不能是公有的

  • 包含公有可變域的類並非線程安全的
  • 即便域是final 的,而且引用不可變對象
  • 當這個域變成公有的時候,就放棄了「切換到內部數據表示法」的靈活性
  • 一樣的狀況,適用於靜態域
  • 例外:常量構成類提供的整個抽象的一部分,可使用靜態final 域暴漏他們
  • 上述例外:大寫字母,下劃線分割,要麼引用基本類型值,要麼不可變類對象
  • 若是引用可變對象,即使final 修飾,其餘地方能夠修改、災難後果

1四、長度非零的數組是可變的

  • 類具備的公有final 數組域、返回這種域的訪問方法,幾乎都是錯的
  • 若是類具備這樣的域或訪問方法,客戶端能夠訪問修改數組中的內容(常見安全漏洞)

  • 解決上述漏洞:

  • 備份解決:

兩種解決方案,要考慮客戶端如何使用結果、怎麼方便、性能高來進行選擇

相關文章
相關標籤/搜索