java8--物件導向 下(瘋狂java講義3) 複習筆記

來源:互聯網
上載者:User

標籤:大於   訪問   equal   程式員   執行個體   隱式   有用   系統   digg   

1、如果一個封裝類和一個基本類型比較大小,或者是兩個基本類型進行比較大小,直接用==就好; 
如果是兩個封裝類進行比較大小,那麼使用equals(),傳回值是true,false,或者使用Xxx.compare(),傳回值是1,0,-1。(這裡的equals()方法,已經被封裝類重寫過了,不是Object的equals()) 
2、==和equals方法的區別 
當使用==來判斷兩個變數是否想等時,比較的是棧記憶體中的值,如果兩個變數是基本類型變數,且都是數實值型別,那麼棧記憶體中個存放的是基本類型變數的值,所以只要兩個基本類型變數的值想等,就會返回true。但對於兩個參考型別變數,由於棧記憶體中存放的是變數的引用,所以只有當這兩個參考型別變數指向同一個對象是,==才會返回true。==不可用於比較類型上沒有父子關係的兩個對象。 
equals()方法是Object類的一個執行個體方法,但這個方法和==沒區別。不過String類和基本類型的封裝類重寫了這個equals()方法,不再比較引用對象的引用地址,而是比較所引用的值。 
3、類成員 
static 關鍵字修飾的成員是類成員,有類變數、類方法、靜態初始化塊三部分,static關鍵字不能修飾構造器。static修飾的類成員屬於整個類。除了這三個,類中還可以包括構造器和內部類(包括介面、枚舉),內部類可以用static修飾。 
null對象可以訪問它所屬類的類成員。 
對static關鍵字而言:類成員(包括方法、初始化塊、內部類和枚舉類)不能訪問執行個體成員(包括成員變數、方法、初始化塊、內部類和枚舉類)。因為類成員的範圍是屬於類的,類成員的範圍比執行個體成員的範圍更大,完全可能出現類成員已經初始化完成,但執行個體成員還不曾初始化的情況,如果允許類成員訪問執行個體成員,將會引起大量錯誤。

4、final修飾符 
final修飾的變數獲得初始值後不能被重新賦值,因此final修飾成員變數和修飾局部變數時,是有區別的。 
final成員變數: 
與普通成員變數不同的是,final修飾的成員變數必須由程式員顯示的初始化,系統不會對final成員進行隱式初始化。 
final修飾的類變數在聲明時或靜態初始化塊中指定初始值。 
final修飾的執行個體變數,在聲明時或非靜態初始化塊中或構造器中指定初始值;

final局部變數: 
系統不會對局部變數進行初始化,局部變數必須由程式員顯示初始化。因此使用final修飾局部變數時,既可以在定義時指定預設值,也可以不指定預設值。如果final 修飾的局部變數在定義時沒指定預設值,則可以在後面的代碼中對該fianl變數賦初始值,但只能一次,不能重複賦值。

final修飾基本類型變數和修飾參考型別變數的區別: 
當使用final修飾基本類型變數時,不能對基本類型變數重新賦值,因此基本類型變數不能被改變。但對於參考型別變數而言,它儲存的僅僅是一個引用,final只保證這個參考型別變數所引用的地址不變,即一直引用同一個對象(使用final修飾的參考型別變數不能被重新賦值),但這個對象完全額可以發生改變(即可以改變參考型別變數所引用對象的內容)。

final方法 
final修飾的方法不可被重寫。如果不希望子類重寫某個方法,可以使用final修飾該方法。

final類 
final類不可以有子類(不可被繼承)。

不可變類 
使用private和final修飾符類修飾該類的成員變數。 
提供帶參數構造器 
不提供setter方法 
如果有必要,重寫Objcet類的hashCode()和equals()方法。

緩衝不可變類的執行個體 
如果程式經常需要使用相同的不可變類執行個體,則應該考慮緩衝者在不可變類的執行個體。畢竟重複建立相同的對象沒有太大的意義,而且加大系統開銷。 
緩衝是軟體設計中一個非常有用的模式,緩衝的實現方式有很多種,不同的實現方式可能存在較大的效能差別。但是,盲目亂用緩衝也會導致系統效能下降,緩衝的對象會佔用系統記憶體,所以緩衝一個重複使用機率不大的執行個體,就弊大於利。

5、抽象類別 
abstract 修飾的方法必須重寫才有意義,所以abstract不能和private 或 final一起使用. 
6、介面 
介面裡不能保護普通方法,介面裡所有的方法都是抽象方法 ;java8對介面進行了改進,允許在介面中定義預設方法,預設方法可以提供方法實現. 

介面是從多個相似類中抽象出來的規範,介面不提供任何實現.介面體現的是規範和實現分離的哲學. 
介面通常是定義多一組公用方法. 
介面完全支援多繼承,一個介面可以直接繼承多個父介面,但介面只能繼承介面,不能繼承類. 
一個類可以實現多個介面,如果一個類實現了多個介面,那麼這個類的對象就可以直接賦值給多個父類變數,這就是Java提供的類比多繼承.

由於介面定義的是一種規範,因此介面裡不能包含構造器和初始化塊定義.介面裡可以包含成員變數(只能是靜態常量),方法(只能是抽象執行個體方法,類方法(1.8),或預設方法(1.8)),內部類(包括內部介面,枚舉)定義. 
系統自動為介面裡的成員變數添加public static final修飾符. 
所以介面裡定義int MAX = 50;和定義 public static final int MAX = 50;的意義是一樣的.

7、內部類

  

 

java8--物件導向 下(瘋狂java講義3) 複習筆記

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.