1、成員變量分爲實例變量和靜態變量(類變量)。
實例變量:沒有用static修飾的成員變量。
靜態變量:用static修飾的成員變量,又稱爲類變量。
區別:
(1)當Java程序執行時,類的字節碼文件被加載到內存,如果該類沒有創建對象,實例變量不會被分配內存;但類變量會被分配相應內存。
(2)實例變量必須通過對象訪問;類變量可以通過對象訪問,也可以通過類名訪問。
不同對象的實例變量互不相同,即分配不同的內存空間,改變其中一個對象的實例變量不會影響其他對象的實例變量;類變量在該類加載到內存時就被分配內存,不再重新分配內存,所有對象共享類變量,類變量的內存空間直到程序退出運行才被釋放。
2、方法分爲兩個部分:方法的聲明和方法體。
(1) 除構造方法之外,方法都必須都有類型,即使類型爲void也不能省略。
(2)方法內定義的局部變量從它定義的位置之後開始有效。
(3)方法:構造方法、實例方法、類方法。
(4)實例方法可以操作成員變量,無論是實例變量還是類變量;實例方法必須通過對象來調用。
(5)類方法只能操作類變量,不能操作實例變量;類方法還可以通過類名調用。
(6)爲什麼實例方法必須通過對象來調用?——當類的字節碼文件被加載到內存時,類的實例方法不會被分配入口地址,只有當類創建對象後,類的實例方法才分配入口地址。但是,創建一個對象時,實例方法分配了入口地址,再創建對象時,不再分配入口地址,即方法的入口地址被所有對象共享。
(7)當使用new和構造方法創建對象時,首先分配成員變量給該對象,同時實例方法分配入口地址,再執行構造方法中的語句,完成必要的初始化。
(8)爲什麼類方法不能操作實例變量和實例方法?——在類創建對象之前,實例成員變量還沒有分配內存,實例方法也還沒有分配內存。
3、方法中的參數傳值:
(1)對於基本數據類型的參數,傳遞的值的級別不能高於該參數的級別。
(2)對於引用類型參數的傳值,傳的是變量的引用,而不是變量所引用的實體。引用的改變不會影響實體,但是實體的改變,會改變原變量實體的改變。
4、方法重載:是多態性的一種。在同一個類中,具有相同的名字,但參數必須不同,方法的返回類型和參數的名字不參與比較。
方法的重寫:這個出現在之類繼承父類的方法,方法的返回類型、名字、參數全部相同,對方法體重寫。