學習的關鍵不在記住語法,而要去思考設計者為什么要發明這個語法或標識。
拿static來舉例,static是用來修飾類的成員變量和成員函數的,只要修飾了成員變量,那么該成員變量會被所有該類創建出的實例所共享,可是為什么要弄個成員變量給所有實例共享呢?每個對象都有自己的不也行嗎。問題繼續往下走,我們拿Person來舉例。
class Person(){ String name; Static String country="china";}Person p1=new Person();Person p2=new Person();Person.country;p1.country;創建2個Person類的實例,每個實例所特有的name將各自創建一份,而country將單獨放在內存當中的數據共享區,既然是每個Person對象的國家都是中國,那么,如果把country變量給每個Person實例都創建一份,將浪費內存空間。因此,把共有的成員變量放在公共數據區。
接下來分析下static修飾過的成員變量的特性: 1.隨著類的加載而加載 2.它可以被類名調用或者類對象調用 3.在類的對象被實例化之前就已經存在 4.當static修飾成員函數的時候,只能在該函數中調用靜態成員變量。(很簡單,舉個反例,靜態成員函數也是在類對象實例化之前存在的,若在該函數中,出現this.name,此時this不是任何對象,因為壓根還沒被實例化,所以出現非靜態變量name是錯誤的。)
|
新聞熱點
疑難解答