黑馬程序員--- 學習筆記(第五天)

 —————————— ASP.Net+Android+IOS開發.Net培訓、期待與您交流!——————————

面向對象的概念:

講功能封裝對象,強調具備了功能的對象.
面向對象是一種思想,講複雜問題簡單化,是一個指揮者.
例子:
對於面試,我就對象,擁有編程的專業能力


人開門  名詞提煉法封裝對象
//人  門   兩個對象

人{
   開門(門){
門.開();//人是指揮者,調用門打開自己的方法
   }
}


門{
   開(); //門擁有自己打開的方法
}
/*
模擬人開門
*/
class Demo1 
{
	public static void main(String[] args) 
	{
		//名詞提煉法: 人  門
		/*
		人{
			開門(new門){
				門.開();//指揮門對象,調用它自己的開方法
			}
		}

		門{
			開(){
			
			}
		}
		
		 */
	}
}



//面向對象有三個特徵: 封裝, 繼承, 多態


類和對象的關係
類:對現實生活中事物進行描述
對象:就是這類事物,實實在在存在的個體
簡單說:類是對象的模板,對象是類的實例




現實生活中的對象: 張三,李四
想要描述 :提取對象中的共性內容,對具體的抽象
描述時:這些對象的共性有:姓名,年齡,性別,具備學習的功能


映射到java中,描述時就是class定義的類
具體對象就是java在堆內存中用new關鍵字建立的實體


汽車類
圖紙(類=模板)
小車(對象=實例)
//類成員就是成員變量和成員函數


成員變量與局部變量的不同:
1.作用域:成員變量作用於類,局部變量作用於函數,或者語句中
2. 在內存中:成員變量在堆內存中,具有默認值,局部變量在棧內存中,只能初始化纔可以使用


可以在本類中創建本類對象,和主函數

程序唯且只有一個主入口即可


匿名對象:
是對象的簡寫格式,例如:new car();


使用方式:
當對象的方法只調用一次時,可以用匿名對象來完成,這樣比較簡化


用匿名對象作爲參數傳遞.


封裝:
隱藏對象的具體實現細節,對外提供公開的訪問方式.

封裝的好處:
1.講變化隔離 
2.便於使用
3.提高重用性
4.提高安全性
封裝的原則:
1.把不需要對外提供的內容都隱藏起來
2.把屬性都隱藏,提供公共方法對其訪問


private:私有的,權限修飾符,用於類中成員,代表成員本類中有效,需要對外提供訪問方法


一個屬性對象set get方法


注意:私有僅僅是封裝的一種表現形式


之所以對外提供訪問方式,就因爲可以在訪問方式中加入邏輯判斷等語句,
對語句的數據進行判斷,提高代碼的健壯性


構造函數:
對象一建立就會調用與之對應的構造函數


特點:
1.函數名與類名一樣
2.不用定義返回值類型
3.不可以寫return語句

作用:給對象進行初始化

構造函數的小細節:
當一個類中沒有定義構造函數時,那系統會默認給該類加入一個無參構造函數


當類中有自定義構造函數,系統默認的構造函數就沒有了.
調用空參數new 實體就會報錯


一個類可以有多個構造函數,重載即可


構造函數和一般函數在寫法,運行上也有不同
構造函數一建立就會運行,一般方法就是對象調用纔會執行
一個對象建立構造函數只會執行一次,一般函數只要調用就可以執行


什麼時候定義構造函數呢?
當分析事物時,該事物一存在就具備一些特性或者行爲,那麼
就將這些內容建立在構造函數中


構造代碼塊
作用:給對象初始化的

對象一建立就運行,且優先於構造函數執行
和構造函數的區別:
構造代碼塊給所有的對象進行統一初始化
而構造函數是給對應的對象初始化的


構造代碼塊中應寫不同對象共性的初始化內容


this關鍵字


this代表它所在函數所在的引用,簡單說:那個對象在調用this函數,this就
代表哪個對象

this關鍵字的基本應用:
1.當定義類中功能時,該函數內部需要用到此函數的對象時,這時用this
關鍵字表示這個對象
2.但凡本類功能內部使用了本類對象,都有this關鍵字表示
3.this關鍵字應用與構造函數之間互相調用
4.this用來解決成員變量和局部變量的命名衝突

/*
類 與 對象
*/
class Demo2 
{
	public static void main(String[] args) 
	{
		Car c=new Car();//實例化一個空白汽車對象
		c.show();
		Car c1=new Car("藍色");//實例化一個帶顏色的汽車對象
		c1.show();
		Car c2=new Car("紅色",4);  //實例化一個帶顏色,輪胎數的汽車對象
		 c2.show();
		boolean b=c2.compare(new Car("白色",4));//匿名對象傳參   比較兩車輪胎數是否相等
		System.out.println("比較結果:"+b);
	}
}
/*小車類*/
class Car
{
	/*構造代碼塊  隨着對象一建立就運行*/
	{

		System.out.println("我們汽車都用會跑");
	}

	/*屬性的private,對外提供公共的訪問方式,加入邏輯判斷語句,提高代碼健壯性*/

	private String color;//小車顏色

	private int num;	 //小車輪胎數  

	/*空參數構造函數*/
	public Car(){
	
	}
	/*帶顏色的構造函數*/
	public Car(String color){
		this.color=color; //解決成員變量與局部變量的命名衝突
	}
	/*帶顏色,輪胎數的構造函數*/
	public Car(String color,int num){
		this(color); //this 實現構造函數互相調用
		this.num=num;
	}
	/*設置顏色  set */
	public void setColor(String color){
		this.color=color;//this關鍵字 代表調用這個本類對象,調用它的對象
	}
	/*獲取顏色  get */
	public String getColor(){
		return color;
	}
	/*設置輪胎數 set  num必須>=4,否則默認num=4*/
	/*屬性的private,對外提供公共的訪問方式,加入邏輯判斷語句,提高代碼健壯性*/
	public void setNum(int num){
		if(num>=4)
			this.num=num;
		else 
			this.num=4;
	}
	/*獲取輪胎數  get*/
	public int getNum(){
		return num;
	}
	/*比較輪胎數與別的汽車是否相同*/
	public boolean compare(Car c){
		return this.num==c.getNum();
	}
	/*汽車信息輸出類*/
	public void show(){
		System.out.println("顏色:"+color+"輪胎數:"+num);
	}
}


注意: this只能放在構造函數第一行
     this不能出現在普通函數上
     
不能出現兩個函數之間互相調用的情況



 —————————— ASP.Net+Android+IOS開發.Net培訓、期待與您交流!——————————
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章