針對類和介面的一些約定

2022-05-14 21:57:44 字數 1277 閱讀 7276

1使類和成員的可訪問性最小化

1) 盡可能地使每個類或者成員不被外界訪問到。

對於頂層的(非巢狀的)類和介面,只要兩種可能的訪問級別:包級私有和公有的。如果你用public修飾符宣告了頂層類或者藉口,那麼他就是公有的,否則就是包級私有的。能包級私有就設定為包級私有的,如果是包級私有的,這個類就成了這個包的實現的一部分,而不是該包匯出的api的一部分,那麼在以後的發行版本中,可以對他進行修改、替換、或者刪除,而無需擔心影響現有的客戶端程式。

2)例項域決不能是公有的,包含公有可變域的類並不是執行緒安全的

換句話說,對於每個域不能是public,而是private。然後提供乙個訪問的get方法。

除了公有靜態final域的特殊情形外,公有類都不應該包含公有域,並有要確保公有靜態final域所引用的物件都是不可變的。

2.在公有類中使用訪問方法而非公有域

3. 使可變性最小化

為了使類成為不可變,要遵循下面五條規則

1) 不要提供任何會修改物件狀態的方法

2)保證類不會被擴充套件

3)使所有的域都是final的

4)使所有的域都成為私有的

5)確保對於任何可變元件的互斥訪問。如果類具有指向可變物件的域,則必須確保該類的客戶端無法獲得指向這些物件的引用。並且,永遠不要用客戶端提供的物件引用來初始化這樣的域,也不要從任何方法中返回該物件引用。

構造器應該常見完全初始化的物件,並建立起所有的約束關係,不要在構造器或者靜態工廠之外再提供公有的初始化方法,除非有令人信服的理由必須這麼做。

4.復合優於繼承

對於兩個類a和b,只有當兩者之間確實存在「is-a」關係的時候,類b才應該繼承類a

5.介面優於抽象類

6. 介面只用於定義型別,不應該用來匯出常量

有一種介面叫常量介面,這種介面沒有包含任何方法,他只包含靜態的final域,每個域匯出乙個常量.

常量介面是對介面的不良使用。

原因如下:

1. 介面被用作乙個型別,通過此型別可以引用這個類的例項,為了其他目的定義介面不合適

2.類中使用常量,這是實現細節,實現常量介面後,把這個實現細節洩漏到該類的api中,對類的使用者也沒有價值

3.將來中類不需要這些常量了,仍必須實現這個介面,以保證相容性。

4.常量在編譯時編譯器會進行inline優化。介面變數會導致哪怕你更改了變數值也必須重新編譯引用該介面的的類

5.乙個非final類實現乙個常量介面,它的所有子類的名字空間會被介面中的常量汙染

可替代的方法:

不可例項化的工具類(final 型別,不能繼承)

除錯介面的一些方法

什麼事情都是有乙個順序的,除錯也一樣,遵循一定的步驟就可以進行錯誤的逐一排查。方法二 看執行的程式裡面是否出現timeout這種錯誤。方法三 直接把訪問的ulr複製到瀏覽器裡面執行,看看結果。分為 get和post命令 get命令 方法一 通過瀏覽器來除錯這乙個介面 非常好 方法二 通過debug來...

關於介面的一些思考

下面示例是模擬遊戲 憤怒的小鳥 的實現。叫的方式的介面 public inte ce shouttype 嗷嗷叫 public class aoshout implements shouttype 喳喳叫 public class zhashout implements shouttype 鳥的抽象...

對於介面的一些總結

1.介面中宣告的成員預設為static final成員 不管是基礎資料型別還是引用型別 且必須初始化 2.介面中宣告的方法預設為public且不能有實現體,即 方法體可有引數 3.實現介面的類,必須實現介面中所有方法,且不能降低方法的運用域,即必須顯示宣告為public 4,抽象類不需要實現介面的所...