1 面向過程程式設計和面向對象程式設計
1) 面向過程程式設計, 實作某個功能時,使用函數之間互相調用完成的。函數之間的關聯性很強。
當功能發生改變時,需要重寫新編寫函數。
2) 面向對象程式設計,實作某個功能時,把實作的方式拟人化,通過調用各個對象的功能來實作要求。
蓋房子:
打地基
砌牆
蓋房頂
1 過程
定義方法: 打四方形地基的方法
砌四方形牆的方法
蓋四方形的房頂的方法
蓋房子的方法(){ //四方法的房子。
打四方形地基的方法
}
2 對象:
打地基的人{
打地基的方法;
砌牆的人{
砌牆的方法
}
蓋房頂的人{
蓋房頂的方法;
蓋房子(打地基的人,砌牆的人,蓋房頂的人){
打地基的人.打地基的方法
砌牆的人.砌牆的方法()
蓋房頂的人.蓋房頂的方法()
2 面向對象程式設計
核心“對象"
1) 什麼 是對象? “萬物皆對象"
現實世界裡每個實實在在存在的個體==》對象
2) :如何把現實中的對象 ==》抽象==>程式中的對象
對現實的對象==》歸類 ==》在程式定義類 ==》 建立程式中的對象
歸類:把具有相同特征和相同行為的一組對象歸為一類。==》類名
相同特征 (靜态屬性):屬性
相同行為(動态屬性): 成員方法
每個對象有自己特有的屬性值。 =》屬性屬于對象所有。
成員方法 : 屬于對象所有。
一 類:
具有相同屬性和方法的一組對象的統稱。抽象的,概念性
類規定了程式中的對象所具有的屬性和方法。
二類:
類是自定義的資料類型。 ==》引用資料類型
二者的關系 :
類:是抽象的。有一組相同屬性和方法的對象抽象而得。
對象是具體的。 是類的具體化表現
一 面向對象分析 (OOD)
學生類:
屬性:學号,姓名,性别,年齡,聯系方法,家庭位址,
方法:學習,自我介紹
僅保留與項目相關的屬性和方法
1) 找到類
2) 找到屬性
3) 找到方法
二 面向對象設計
類圖 ---》 UML(統一模組化語言)
三 面向對象程式設計
一 定義類的文法:
通路修飾符 class 類名{
//屬性
//方法
1 通路修飾符 public (所有包可見), 預設的(僅目前包可用)。
2 類名 , 首字母大寫。見名知義。
3 屬性: 屬于對象所有 ->成員變量
資料類型 屬性名;
資料類型 :基本類型,引用類型(類,數組,接口)
屬性名: 第一個單詞首字母小寫,其他單詞首字母大寫。見名知義
注意:屬性有預設值:
基本類型屬性值:
byte,short,int ,long :0
float double : 0.0
char : \U0000
boolean : false
引用類型: null
4 方法: 屬于對象所有 ==》成員方法
通路修飾符 傳回值類型 方法名(參數清單){
方法體;
1) 通路修飾符 : public ,預設的, private ,protected
2) 傳回值類型 :方法執行結束後,傳回的資料類型
無傳回:void
3) 方法名 : 第一個單詞首字母小寫,其他單詞首字母大寫。見名知義
4) 參數清單 :執行方法時需要的資料。
5) 方法體 :完成此方法的代碼。
注意: 在成員方法中,可以通路屬性
一 建立對象: 執行個體化對象
類名 對象名 = new 類名();
Student stu = new Student();
注意:對象名又稱為引用名,存儲是所引用對象的"位址";
二 通路對象的屬性 和方法
1 給屬性指派:
對象名.屬性名 = 值;
2 取屬性的值:
對象名.屬性名;
3 通路對象的方法
對象名.方法名(參數);

一 步建立對象
類名 對象名 = new 類名();
二步 通過 .通路對象的屬性和方法
1 通路屬性
對象名.屬性名
2 通路方法
一 java.lang.NullPointerException
:空引用異常
當引用類型的變量沒有引用資料時,而是null
調用對象的屬性和成員方法,則引發此異常
屬性:成員變量 :可以類中所有成員方法中通路
局部變量 :在方法中定義的變量,形參,在條件結構或循環結構中定義的變量 { }
1 預設值, 屬性有預設值 ,局部變量沒有預設值 ,局部變量在使用前必須指派
2 作用域不同,屬性在類中任何成員方法中使用,局部變量僅可以定義的方法中使用。
3 優先級 ,當方法中有與屬性同名的局部變量時,局部變量的優先高于屬性。==》就近原則
在方法中區分屬性與局部變量,在屬性的前面加this.屬性名;
構造方法:
1 構造方法的文法:
通路修飾符 構造方法名(參數清單){
注意事項:
1 構造方法名稱必須與類名同名
2 構造方法沒有傳回值類型。也不能寫void.如果寫了void則不再是構造方法
2 構造方法的作用
構造對象并初始化屬性值
3 何時使用構造方法:
建立對象時使用構造方法,與new關鍵詞一起使用。
4 構造方法的分類:
隐式構造方法:如果類中沒有定義任何構造方法,則系統給類提供一個public的無參構造方法;
顯示構造方法:在定義類時,編寫構造方法;此時系統不再提供構造方法
無參構造方法
有參構造方法
注意: 如果在類中定義構造方法,則系統不再提供無參構造方法;
是以在類中定義有參構造方法時,建議同時定義一個無參構造方法。
一 方法的重載 (overload)
1 在同一個類中
2 方法名相同,但參數不同的方法 == 》 方法重載
3 參數不同(個數,類型不同,順序不同)
4 與形參的名稱無關
5 與傳回值類型無關
6 與通路修飾符無關
二 :好處
1 友善調用,增強代碼的可讀性
2 實作方法調用的多态:
一個方法名,根據參數的不同的執行不同的操作
三 哪些方法可以重載:
1 構造方法
2 成員方法
3 靜态方法
this是什麼?
this是一個引用,存儲是目前正在運作的對象的"位址"
this在目前對象内部引用目前對象
每個對象内部都有一個this
2 this可以用在哪些地方? 在類中使用
在類的成員方法中使用
在類的構造方法中使用
3 如何使用this?
1) 在成員方法中使用,可以通路屬性和成員方法
this.屬性名 :
this.成員方法名(參數);
2) 在構造方法使用,可以通路屬性和成員方法,
this.屬性名
this.成員方法名()
3)在構造方法中,通路同類其他的構造方法
this(參數); ==》通路同類的其他構造方法 ,此行代碼寫在構造方法的第一行
this(); -->調用同類中無參的構造方法
好處 : 代碼的複用
類 封裝了對象的屬性和方法
方法 封裝方法的實作細節
一. 封裝屬性:
1 屬性私有化
2 給屬性提供公共的方法 :指派方法(setter方法)與取值方法(getter)方法
指派方法 : 無傳回值,但帶有參數(類型與屬性的類型一緻)方法
方法名: set屬性名(參數){} ,把屬性名的首字母改為大寫
public void setSex(String sex){}
取值方法 : 有傳回值(與屬性類型一緻) 無參的方法
方法名: get屬性名(){} ,把屬性名的首字母改為大寫
public String getSex(){ return sex}
注意 :如果屬性的類型為boolean則get方法改為:is屬性名(); 把屬性名的首字母改為大寫
3 在set方法中添加控制語句
二. 使用封裝的好處:
1 保證資料的安全性
2 代碼可重用性
3 友善修改
一 通路修飾符:
public :公共 的
protected : 受保護的
預設的: (不寫任何修飾符)
private :私有的
二 修飾類:(不指内部類)
public ,預設的
三 修飾變量(不包括局部變量),修飾方法
public ,protected,預設的,private
一 繼承 extends
繼承的優點 : 實作代碼的複用及功能的擴充
類圖:
二 、 java.lang.Object :是所有類的超類
定義類沒有繼承自任何一個父類,則預設繼承Object
三 在java中繼承的特點
一個子類僅可以有一個直接父類 ==》 “單一繼承"
可以”多重繼承"
四、子類可以繼承父類的哪些内容
1 可以繼承父類成員屬性和成員方法(注意通路權限)
2 不繼承父類的構造方法
3 子類除了繼承父類的内容,還可以有自己特有的屬性和方法
五 建立子類對象會調用父類的構造方法嗎? 如果會調用,先調用父還先調用子類?
會調用父類的構造方法。先調用父類的構造方法再調用子類的構造方法。
六 如何在子類的構造方法中調用父類的構造方法的?
在子類的構造方法中,第一行調用父類的構造方法:
super(參數);
如果調用父類的無參構造方法:
super(); //可以省略不寫
注意:
1 如果子類中沒有顯示的調用父類的構造方法,則預設調用父類的無參構造方法
2 如果在子類調用父類的帶參構造方法,則必須在子類的構造方法第一行:super(參數)
3 如果父類中僅有帶參構造方法,則子類的所有構造方法中必須顯示的調用父類的有參構造方法;
七、 在java的程式中任何類之間都可以繼承嗎?
1) 從文法上說,可以。
2) 從語義不可以。 有“is-a"的關系 : 子類 是一個父類
父類如何得到的?
類 : 由現實的具有相同屬性和相同方法的一組對象 抽象而得。
父類 : 由具有相同屬性和相同方法的一組類抽象面得的。
程式設計: 父類 ==》 子類 ==》對象