一、java面向對象學習的三條主線:
1、java類及類的成員:屬性、方法、構造器;代碼塊、內部類
2、面向對象的三大特征:封裝性、繼承性、多態性、(抽象性)
3、其它關鍵字:this、super、static、final、abstract、interface、extend、package、import......
面向過程(pop)和面向對象(oop)
面向對象的兩個要素:
類:對一類事物的描述,是抽象的、概念上的定義
對象:是實際存在的該類的每個個體,因而也稱為實例(instance)
類 = 抽象概念的人 ;對象 = 實實在在的某個人
面向對象程序設計的重點是類的設計
類的設計,其實就是類的成員的設計
屬性:對應類中的成員變量
行為:對應類中的成員方法
Field = 屬性 = 成員變量 = 域、字段
Method = 行為= (成員)方法 = 函數
二、類和對象的使用(面向對象思想落地的實現):
1.創建類,設計類的成員
2.創建類的對象
3.通過“對象.屬性”或“對象.方法”調用對象的結構。
三、如果創建了一個類的多個對象,則每個對象都獨立的擁有一套類的屬性。(非static的)
意味着:如果我們修改一個對象的屬性a,不會影響另外一個對象屬性a的值。
四、對象的內存解析:
堆(Heap):此內存區域的唯一目的就是存放對象實例,幾乎所有的對象實例都在這里分配內存。這一點在java虛擬機規范中的描述是:所有的對象實例以及數組都要在堆上分配。
棧:通常所說的棧(Stack),是指虛擬機棧。虛擬機棧用於存儲局部變量等。局部變量表存放了編譯期可知長度的各種基本數據類型(boolean、byte、char、short、int、float、long、double)、d對象引用(reference類型,它不等同與對象本身,是對象在堆內存的首地址)。方法執行完成,自動釋放。
方法區(Method Area),用於存儲已被虛擬機加載的類信息、常量、靜態變量、即時編譯器編譯后的代碼等數據。
類中屬性的使用:
屬性(成員變量) VS 局部變量
1.相同點:
1.1定義變量的格式:數據類型 變量名 = 變量值
1.2先聲明,后使用
1.3變量都有其對應的作用域
2.不同點:
2.1在類中聲明的位置的不同
屬性:直接定義在類的一對{}內
局部變量:聲明在方法內、方法形參、代碼塊內、構造器形參、構造器內部的變量
2.2關於權限修飾符的不同
屬性:可以在聲明屬性時,指明其權限,使用權限修飾符。
常用的權限修飾符:private、public、缺省(什么都沒寫)、protected >>>封裝性
局部變量:不可以使用權限修飾符
2.3默認初始化值得情況不同:
屬性:類的屬性,根據其類型,都有默認初始化值。
整型(byte、short、int、long):0
浮點型(float、double):0.0
字符型(char):0或‘\u0000’
布爾型(boolean ):false
引用數據類型(類、數組、接口):null
局部變量:沒有默認初始化值。
意味着,我們在調用局部變量之前,一定要顯式賦值。
特別的:形參在調用時,我們賦值即可。
2.4在內存中加載的位置不同:
屬性:加載到堆空間中(非static)
局部變量:加載到棧空間中。
類中方法的聲明和使用:
方法:描述類應該具有的功能。
1.方法的聲明:權限修飾符 返回值類型 方法名(形參列表){
方法體
}注意:static、final、abstract來修飾的方法,后面隨筆再說。
2.方法的一些說明:
2.1關於權限修飾符:默認方法的權限修飾符先都使用public
java規定方法的4種權限修飾符:private、public、缺省、protected
2.2返回值類型:有返回值 VS 沒有返回值
2.2.1如果方法有返回值,則必須在方法聲明時,指定返回值的類型。同時,方法中,需要使用return關鍵字來返回指定類型的變量或常量。
2.2.2如果方法沒有返回值,則方法聲明時,使用void來表示。通常,沒有返回值的方法中,就不使用return。但是,如果使用的話,只能“return;”表示結束此方法的意思。
2.3方法名:屬於標識符,遵循標識符的規范和規則,“見名知意”。
2.4參數列表:方法可以聲明0個、1個、或者多個形參。
3.方法的使用中,可以調用當前類的屬性或方法:
特殊的:方法A中又調用了方法A我們稱為:遞歸方法。
注意:方法中不能定義方法!