一:自動加強的包裝類java
自動裝箱:把一個基本類型變量直接賦給對應的包裝類變量,或者賦給object變量。自動拆箱則與之相反,容許直接把包裝類對象直接賦給一個對應的基本類型變量。程序員
包裝類還能夠實現基本類型變量和字符串之間的轉換:a、利用包裝類提供的parseXxx(String s)靜態方法 b、利用包裝類提供的Xxx(String s)構造器。將基本類型變量和「」進行鏈接運算,系統會自動把基本類型變量轉換成字符串。無符號整數不支持負數,其最小值爲0.編程
二:處理對象緩存
java對象都是object類的實例。code
toString()方法是object類裏的一個實例方法,將全部的java類都是object類的子類,所以全部的java對象都具備toString()方法。toString()方法是一個自我描述的方法,老是返回該對象實現類的「類名+@+hashcode」值,用戶使用的時候能夠重寫toString方法。對象
==和equals方法的異同:繼承
當使用==判斷兩個變量是否相等時,若是兩個變量是基本類型變量,且都是數值類型(不必定要求數據類型嚴格相等),則只要兩個變量的值相等,就返回true。可是對於兩個引用類型變量,只有它們指向同一個對象時,==判斷纔會返回true。接口
使用new String()建立出來的字符串是運行時建立出來的,它被保存在運行時內存區(堆內存),不會放入常量池。生命週期
自定義相等的對象使用equals方法。正確的重寫equals()應該知足:自反性,對稱性,傳遞性,一致性。內存
三:類成員
static關鍵字不能修飾構造器。static能夠修飾成員變量,方法,初始化塊,內部類,以static修飾的成員就是類成員。類變量既能夠經過類來訪問,亦能夠經過類的對象來訪問。
四:final修飾符
final修飾的變量不可被改變,一旦得到了初始值,該final變量的值就不能被從新賦值。
final修飾的成員變量必須由程序員顯示的指定初始值。
final修飾的類變量,要麼在定義該類變量時指定初始值,要麼在靜態初始化塊中爲該變量指定初始值。
final修飾的形參不能被賦值。
final修飾基本類型變量時,不能對基本類型變量從新賦值,所以基本類型變量不會改變,可是對於引用變量而言,final保存的僅僅是一個引用,final只保證這個引用類型變量所引用的地址不會變,一直引用同一個對象,但這個對象徹底能夠發生改變。
final修飾的方法不可被重寫,但能夠被重載。
final修飾的類不能夠有子類。
建立不可變類:
a:使用private和final修飾符來修飾該類的成員變量。
b:提供帶參數的構造器,用於根據傳入參數來初始化類裏的成員變量。
c:僅爲該類的成員變量提供getter方法,不要爲該類的成員變量提供setter 方法。
不可變類的實例在整個生命週期中永遠處於初始化狀態,它的實例變量不可改變。
緩存池採用「先進先出」規則來決定哪一個對象將被移出緩衝池。
五:抽象類
抽象方法只有方法簽名,沒有方法實現。
抽象方法和抽象類使用abstract來修飾,有抽象方法的類只能被定義成抽象類,抽象類裏能夠沒有抽象方法。抽象方法不能有方法體。抽象類不能被實例化,沒法使用new關鍵字來調用抽象類的構造器建立抽象類的實例。抽象類的構造器不能用於建立實例,主要用於被其子類調用。abstract不能修飾構造器。static和abstract不能同時修飾某個方法,但能夠同時修飾內部類。
六:接口
接口使用interface關鍵字。接口裏不能包含普通方法,接口裏全部的方法都是抽象方法。接口定義了一種規範,接口定義了某一批類所須要遵照的規範,接口不關心這些類的內部狀態數據,也不關心類裏方法的實現細節,它只規定這批類裏必須提供某些方法,提供這些方法的類就能夠知足實際須要。接口能夠有多個直接父接口,可是接口只能繼承接口。接口裏不能包含構造器和初始化塊。
接口和抽象類的區別:
a:接口只能包含抽象方法,靜態方法和默認方法,抽象類能夠包含普通方法。
b:接口裏只能定義靜態常量,不能定義普通成員變量,抽象類則能夠定義兩種。
c:接口裏不包含構造器,抽象類裏包含構造器。
d:接口裏不包含初始化塊,抽象類能夠包括。
面向接口編程:1:簡單工廠模式 2:命令模式
七:內部類
內部類提供了更好的封裝。
內部類成員能夠直接訪問外部類的私有數據,但外部類不能訪問內部類的實現細節。
匿名內部類適合用於建立那些僅須要一次使用的類。
內部類能夠比外部類多使用三個修飾符:private,protected,static。
非靜態內部類不能擁有靜態成員。
非靜態內部類對象裏,保存了一個它所寄生的外部類對象的引用。若是外部類須要訪問非靜態成員變量,則必須顯示建立非靜態內部類對象來調用訪問其實例成員。非靜態內部類對象必須寄存在外部類對象裏,而外部類對象則沒必要必定要有非靜態內部類對象寄生其中。
若是使用static來修飾一個內部類,則這個類就屬於外部類自己。靜態內部類能夠包含靜態成員,也能夠包含非靜態成員。
匿名內部類必須繼承一個父類,或實現一個接口,但最多隻能繼承一個父類,或實現一個接口。
匿名內部類不能是一個抽象類。
匿名內部類不能定義構造器。
八:枚舉類
enum關鍵字。
枚舉類能夠實現一個或多個接口。非抽象的枚舉類不能派生子類。枚舉類的構造器只能使用private訪問控制符。枚舉類的全部實例必須在枚舉類的第一行顯示列出。枚舉類的實例值只能是枚舉值,不能隨意經過new來建立枚舉類對象。