日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

《Effective Java 2nd》第4章 类和接口

發布時間:2025/3/20 java 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《Effective Java 2nd》第4章 类和接口 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄 第13條: 使類和成員的可訪問性最小化 第14條:在公有類中使用訪問方法而非公有域 第15條:使可變性最小化 第16條:復合優先于繼承 第17條:要么為繼承而設計,并提供文檔說明,要么就禁止繼承 第18條:接口優先于抽象類 第19條:接口只用于定義類型 第20條:類層次優于標簽類 第21條:用函數對象表示策略 第22條:優先考慮靜態成員類

第4章 類和接口

第13條: 使類和成員的可訪問性最小化

盡可能使每個類或者成員不被外界訪問。提供盡可能小的訪問級別。

final維持字段不可變性,字段要么是基本類型的、要么是指向不可變對象的引用。

如果final包含可變對象的引用,雖然引用不能被修改,但是引用對象的內部卻可以被修改。

注意:長度非0的數組總是可變的。

?

第14條:在公有類中使用訪問方法而非公有域

?

第15條:使可變性最小化

講了不可變類的相關內容。

不可變類:實例不能被修改的類。實例化后,實例中包含的內部信息在整個生命周期中固定不變。

如何使類不可變

1)不提供任何修改對象狀態的方法

2)保證類不會被擴展。如將類聲明為final

3)使所有的域都是final的

4)所有的域都是私有的

5)對任何可變域(指指向可變對象的域),使用保護性拷貝技術

不可變對象的好處:線程安全,可以自由共享

不可變類的唯一缺點:每個不同的值都要有一個單獨的對象,比如String s = ”aaa", String s2 = "bbb"。

因不可變類的缺點,可以提供一個可變配套類,比如對String來說有StringBuilder

?

第16條:復合優先于繼承

這里的繼承指的是一個類擴展另一個類的時候,不含接口繼承(類實現接口、接口實現接口)。

只有當兩個類A和B,兩者之間確實存在is a關系的時候,才適合用繼承。問自己:每個B都是A嗎?

?

第17條:要么為繼承而設計,并提供文檔說明,要么就禁止繼承

如果某個類是為繼承而設計的,在類文檔中應該明確描述覆蓋每個方法所帶來的影響。

?

第18條:接口優先于抽象類

接口和抽象類區別

1)抽象類允許包含某些方法的實現,接口不允許。

2)實現抽象類,類必須成為抽象類的子類。但是,任何一個類均可實現一個接口,不管這個類位于類繼承層次的哪個位置。

?

接口的好處:

1)現有類很容易通過實現新的接口,實現新的功能,不管這個類位于類繼承層次的哪個位置。

2)接口是定義mixin類型的理想原則。

mixin類型:指類除了實現它的基本功能外,還可以實現mixin類型,以表明它提供了某種可供選擇的功能。

舉例:Comparable是mixin接口,某個類實現后代表具備排序功能。

3)類允許我們構造非層次接口的類型框架。

舉例:singer接口代表歌唱家,songwriter接口代表作曲家,我們完全可以聲明一個SingerSongwriter接口擴展上面兩個接口,代表同時歌唱家也是作曲家。

?

接口不允許含方法的實現。但是可提供個抽象的骨架實現類。接口用于定義類型,但是骨架實現類用于接口接口實現相關工作。

舉例:集合框架中的AbstractCollection、AbstractSet等都是骨架實現類。

?

第19條:接口只用于定義類型

講了不要使用常量接口。常量接口類似于下面。

public interface XXXXContants {static final double XXXXXX = 1.1222;static final double YYYYYY = 1.3222; }

常量接口的壞處:在版本迭代時,某個類不再使用這些常量了,仍必須實現這個接口,以確保二進制兼容性。

?

如何定義常量。

1)常量與某個類或接口緊密相關,定義在這個類后接口中。

舉例:Integer中的常量MIN_VALUE

2)使用枚舉類型

3)使用常量工具類。

?

第20條:類層次優于標簽類

?

?

第21條:用函數對象表示策略

Java中沒有函數指針,但是可以用對象引用實現同樣的功能,這樣的實例稱為函數對象,舉例:Comparator類定義了排序策略。

?

第22條:優先考慮靜態成員類

講了嵌套類,主要是各種內部類的使用場景。

嵌套類有4種:

1)內部類:靜態內部類、非靜態內部類、匿名內部類

2)局部類

?

靜態內部類

靜態內部類常見用法是用作輔助類。舉例:Calculator內部聲明一個靜態枚舉類Operation用于表示計算器支持的各種操作。Calculator.Operation.PLUS,Calculator.Operation.MINUS。

私有靜態內部類的常見用法是用來代表外部類所代表的對象的組件。舉例:Map的Entry。

?

非靜態內部類

非靜態內部類的常見用法是定義一個Adapter。舉例:Map接口使用非靜態內部類來實現集合視圖(collection view),如keySet、entrySet等。

?

靜態內部類和非靜態內部類的區別

1)靜態內部類可看做是普通的類,只是碰巧聲明在另一個類的內部。可以脫離外部類的實例獨立存在。

2)非靜態內部類的每個實例都與外部類的一個實例向關聯,當非靜態內部類被創建時,這種聯系建立起來。

?

匿名內部類

匿名內部類常見用法

1)創建函數對象。舉例:排序時,創建匿名Comparator實例,傳遞給sort方法。

2)創建過程對象。舉例:Runnable、Thread

?

局部類

在任何可聲明局部變量的地方,都可聲明局部類。

轉載于:https://www.cnblogs.com/yeyang/p/10461301.html

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的《Effective Java 2nd》第4章 类和接口的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。