【Java】Java复习笔记-第三部分
修飾符abstract
抽象的,定義框架不去實現,可以修飾類和方法
abstract修飾類:
會使這個類成為一個抽象類,這個類將不能生成對象實例,但可以做為對象變量聲明的類型,也就是編譯時類型
抽象類就相當于一個類的半成品,需要子類繼承并覆蓋其中的抽象方法,這時子類才又創建實例的能力,如果子類沒有實現父類的抽象方法,那么子類也要為抽象類。
abstract修飾方法:
會使這個方法變成抽象方法,也就是只有聲明而沒有實現,實現部分以";"代替,需要子類繼承實現。
抽象方法代表了某種標準,定義標準,定義功能,在子類中去實現功能(子類繼承了父類并需要給出從父類繼承的抽象方法的實現)。
方法一時間想不到怎么被實現,或有意要子類去實現而定義某種標準,這個方法可以被定義為抽象。
注意:
有抽象方法的類一定是抽象類。但是抽象類中不一定都是抽象方法,也可以全是具體方法。
接口(interface)
接口的實現:
關鍵字implements
一個類實現一個接口必須實現接口中所有的方法,否則其為抽象類,并且在實現類中的方法要加上public(不能省略)。
類中的默認修飾符:default。
接口中的默認修飾符:public。
一個類除了繼承另一個類外(只能繼承一個類),還可以實現多個接口(接口之間用逗號分隔)。
?
接口的作用:
間接實現多繼承:用接口來實現多繼承并不會增加類關系的復雜度。因為接口不是類,與類不在一個層次上,是在類的基礎上進行再次抽象。
接口可以抽象出次要類型,分出主、次關系類型,符合看世界的一般方法。
接口隔離,與封裝性有關。一個對象都有多個方面,可以只展示其中幾個方面,其他的都隱藏。因此可以看為“更高層次的封裝”,把 一個大接口做成若干個小接口。
通過接口制定標準(最重要的作用)
接口:制定標準。
接口的調用者:使用標準。
接口的實現類:實現標準。
解耦合作用:把使用標準和實現標準分開,使得標準的制定者和實現者解除偶合關系,具有極強的可移植性
例:sun公司提供一套訪問數據庫的接口(標準),java程序員訪問數據庫時針對數據庫接口編程。接口由各個數據庫廠商負責實現。
接口編程的原則
盡量針對接口編程(能用接口就盡量用接口)
接口隔離原則(用若干個小接口取代一個大接口)
注意:
接口中沒有構造器,也沒有main方法
封裝類
最常用的兩個封裝類Integer和Double
jdk1.4之前基本類型和封裝類的轉化是需要構造器去轉化的,到了jdk1.5是自動進行轉化的
int、Integer和String之間的轉化(最常用的)
?
Object類
hashCode():
返回該對象的哈希碼值
hashCode 的常規協定是:
在 Java 應用程序執行期間,在同一對象上多次調用 hashCode 方法時,必須一致地返回相同的整數,前提是對象上 equals 比較中所用的信息沒有被修改。
如果根據 equals(Object) 方法,兩個對象是相等的,那么在兩個對象中的每個對象上調用 hashCode 方法都必須生成相同的整數結果。
toString():
返回該對象的字符串表示。
通常,toString 方法會返回一個“以文本方式表示”此對象的字符串。結果應是一個簡明但易于讀懂。建議所有子類都重寫此方法。
equals()
指示某個其他對象是否與此對象“相等”。
equals 方法在非空對象引用上實現相等關系:
自反性:對于任何非空引用值 x,x.equals(x) 都應返回 true。?
對稱性:對于任何非空引用值 x 和 y,當且僅當 y.equals(x) 返回 true 時,x.equals(y) 才應返回 true。?
傳遞性:對于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 應返回 true。?
一致性:對于任何非空引用值 x 和 y,多次調用 x.equals(y)始終返回 true 或始終返回 false,前提是對象上 equals 比較中所用的信息沒有被修改。對于任何非空引用值 x,x.equals(null) 都應返回 false。?
?
注意:
當此方法被重寫時,通常有必要重寫 hashCode 方法,以維護 hashCode 方法的常規協定,該協定聲明相等對象必須具有相等的哈希碼。
String、StringBuffer和StringBulder
String:
不可改變的Unicode字符序列
池化思想,把需要共享的數據放在池中,用一個存儲區域來存放一些公用資源以減少存儲空間的開銷。
在String類中,以字面值創建時,會到Java方法空間的串池中去查找,如果沒有則會在串池里創建一個字符串對象,并返回其地址賦給對象變量,如果有就返回串池中字符串的地址,并把這個地址賦給對象變量。
如果是new,則會在堆空間中創建String類的對象,不會有上述的過程
如:
類中的具體方法查看下Api文檔。
調用任何String中的方法,不會改變String自身,除非重新賦值。
StringBuffer:
可改變的Unicode字符序列
允許并發操作,是線程安全的
String類在進行字符串連接時會顯得效率很低,就是因為它所產生的對象的屬性是不能夠修改的,當連接字符串時也就只能創建新的對象。
對于很多字符串連接時,應當使用StringBuffer類,使用這個類的對象來進行字符串連接時就不會有多余的中間對象生成,從而優化了效率。
例:對于字符串連接String str = "A" + "B" + "C" + "D";
產生:"AB"、"ABC"、"ABCD"
在串池中產生的"AB"、"ABC"明顯是多余對象,浪費空間。
解決方案:
StringBulder:
可改變的Unicode字符序列
操作同StringBuffer,只是不支持并發操作,非線程安全的
?
集合
保存多個其他對象的對象,不能保存簡單類型
List:有序(存放元素的順序),可重復的集合
ArrayList:實質就是一個會自動增長的數組
查詢效率比較高,增刪的效率比較低,適用于查詢比較頻繁,增刪動作較少的元素管理的集合。
加載大批量的數據時,先進行手動擴容(就是調用ensureCapacity(int minCapacity)方法),這樣可以提高效率。
LinkedList:底層是用雙向循環鏈表來實現的
查詢效率低,但是增刪效率很高,適用于增刪動作的比較頻繁,查詢次數較少的元素管理的集合
Set:無序的,不允許有重復元素的集合
HashSet:
Object類中的hashCode()的方法是所有類都會繼承的方法,這個方法會算出一個Hash碼值返回,HashSet會用Hash碼值去和數組長度取模,對象的模值(這個模值就是對象要存放在數組中的位置,和數組的下標相同)相同時才會判斷數組中的元素和要加入的對象的內容是否相同,如果不同才會再找位置添加進去,相同則不允許添加。
如果數組中的元素和要加入的對象的hashCode()返回了相同的Hash碼值,才會用equals()方法來判斷兩個對象的內容是否相同。
注意:
要存入HashSet的集合對象中的自定義類必須覆蓋hashCode()、equals()兩個方法,才能保證集合中元素不重復。
TreeSet:
可排序的Set
SortedSet接口是Set的子接口,TreeSet是SortedSet接口的實現類,他可以對集合中的元素進行排序。
將自定義類的對象存放在TreeSet中,這個類需要實現了Comparable接口,TreeSet可以自動過濾掉重復元素所以不在需要重載hashCode()方法,TreeSet會根據比較規則判斷元素內容是否相同,不同則會存入,TreeSet會在元素存入時就進行排序。
Comparable接口:
也叫做可比較接口,這個接口在java.lang包下,只要根據指定類型的排序規則實現了這個接口,就是可排序的。
這個接口中只定義了一個 compareTo(Object o) 方法,該方法的返回值類型是整型,如果當前對象大于參數對象就返回正數,當前對象等于參數對象就返回0,當前對象小于參數對象就返回負值,這樣寫就是升序排列,反之則是進行降序排列。
Comparator接口:
比較器Comparator接口,是另一種對自定義類型對象的集合整體排序的方法,存在于java.util包下。
這個接口中定義了一個 compare(Object o1,Object o2) 方法來比較兩個對象,這個方法的返回值定義和上面介紹的那個方法是一樣。
利用這種方式,則在創建集合的時候把定義好的比較器作為參數,構造一個集合
Map:
存放key-value對(有關系的兩個對象,一個做key,一個做value,同時存入)
HashMap:基于哈希表的 Map 接口的實現,此實現提供所有可選的映射操作,并允許使用 null 值和 null 鍵
遍歷:
先調用keySet()得到key的set集合,
再迭代遍歷key的set集合,
根據key得到value。
Hashtable:
同HashMap,一般不使用
HashMap與Hashtable的區別:
HashMap:非線程安全,不支持并發控制,允許空的鍵值對。
Hashtable:是線程安全,支持并發控制,不允許有空的鍵值對。
SortedMap接口:
Map的子接口,按某一特定排序規則來存放所加入的鍵值對
實現類:TreeMap類。
Key值的排序規則,同SortedSet接口實現類TreeSet
注意:
key一般是8種基本類型的封裝類或者是String類,拿自己自定義的類作為Key沒有意義。
key不可重復,value可以重復
?
轉載于:https://www.cnblogs.com/lcw/p/3204041.html
總結
以上是生活随笔為你收集整理的【Java】Java复习笔记-第三部分的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mysql安装过程(linux:2.6.
- 下一篇: 麻辣排骨火锅的做法