java中的引用
java中的資料分為基本類型和引用類型,是以變量也可以分為基本變量和引用變量。
基本類型變量中儲存的是值
引用中儲存的是對象的記憶體位址
在方法調用傳參時:
基本類型變量傳值
引用傳對象的記憶體位址
多個引用指向同一個對象
基本類型變量傳參,如果在函數中改變形參的值,實參不會發生改變。
引用傳參,如果在函數中形參沒有指向其它對象,那麼改變此對象内部狀态的就是改變實參引用指向的對象的内部狀态。
string對象是不變對象,其内部狀态不會發生改變,如需改變隻能建立新的string對象。
this關鍵字
作用1: 表示目前對象的引用
this.屬性 // 表示通路自己的屬性
this.方法(參數) // 表示調用自己的方法
在一個對象的方法中,可以通路本對象的屬性。
如果方法中有同名的局部變量,則會優先通路局部變量。
此時如果要通路本對象的屬性,則需要使用this引用。
常見用法:
當屬性和局部變量命名沖突時用來通路屬性
在方法中給本對象的屬性指派
作用2:
用在構造方法中,複用本類其他構造方法中的代碼
this(參數) // 執行相應構造方法中的代碼
隻能用在構造方法中。
構造方法不能手動調用,隻能使用this()方式避免備援代碼。
必須是構造方法中的第一行代碼。
建立對象時給屬性指派。
面向對象——封裝
什麼是封裝?
任何對象都要有一個明确的邊界,由這個邊界把對象分成對象的内部和對象的外部。
邊界應該對對象具有保護作用,使得:
對象外部發生的變化不會影響到對象内部;
對象内部發生的變化不會影響到對象外部。
通路權限修飾符:
public:公開的 修飾的屬性或方法不受對象的邊界的控制 從對象的外部可以通路到
private:私有的 修飾的屬性或方法無法穿過對象的邊界 隻能從對象的内部通路到
屬性公開時,對象的邊界形同虛設,沒有對對象的屬性起到任何的保護作用。
屬性私有時,對象的邊界可以對對象的屬性起到保護作用,外界無法通路。
使用公開的方法間接地通路私有的屬性,就相當于規定了通路的途徑,通路的途徑單一了,就可以控制通路的權限。
通常一個類的屬性都是私有屬性,隻能通過公開的方法間接地通路這些屬性。
通過使用通路權限修飾符,可以靈活的控制某個屬性的通路權限(隻讀/隻寫/讀寫),對象的屬性全部在自己的控制之下,實作資料隐藏。
方法也可以使用private修飾,這樣的方法叫做私有方法。
有些方法隻希望能被同一個對象的其它方法調用,不希望其它對象調用,可以定義成私有方法。
公開的方法指的是方法的聲明公開,方法的實作隐藏。
方法的調用者隻需要關心方法的聲明,在聲明不變的情況下,即使改變方法的實作,也不會影響方法的調用者。
封裝的作用:
讓對象能夠各司其職
使對象之間為弱耦合性
迪米特法則:一個對象應當對其他對象有盡可能少的了解。
一個子產品設計的好壞最重要的标志,就是該子產品在多大的程度上将它所有的實作細節隐藏起來,徹底的将它提供給外界的通路方式和内部實作分離。
子產品間僅通過子產品提供的通路方式互相通信,而不關心對方内部的工作細節。
建立一個學生數組,實作如下方法:
找出成績為最高分和最低分的學生
計算所有學生的平均分
按照學生的考試分數給學生數組排序