java學習筆記1——面向對象的一些性質

   statics 是一個特殊關鍵字,可用於修飾方法、Field等成員。Filed這個東西又可以翻譯成成員變量。static修飾的成員表面它屬於這個類本身,兒不屬於該類的丹哥實例,因爲通常把static修飾的Filed和方法也稱爲類Filed、類方法。不用static修飾的普通方法、Field則屬於該類的單個實例,而不屬於該類。通常把不適用static修飾的成員變量和方法也稱爲實例成員變量、實例方法。

       static真正的作用是區分Field、方法、內部類、初始化塊這四種成員到底屬於類本身還是屬於實例。在類中定義的成員,有static修飾的成員屬於類本身,沒有static修飾的成員屬於該類的實例。

       類的構造器是有返回值的,當我們用new來調用構造器時,構造器返回該類的實例。不能在構造器裏顯示使用return來返回當前類的對象,因爲構造器的返回值是隱式的。

        java中,Person p = new Person();這行代碼創建了一個Person實例,也稱爲Person對象,這個對象被賦給p變量。這行代碼產生了兩個東西,一個是p變量,一個是Person對象。類也是一種引用數據類型,程序中定義的Person類型的變量實際上是一種引用,它被存放在棧內存中,只想實際的Person對象。而真正的Person對象則存放在堆內存中。
棧內存中引用變量並未真正存儲對象的成員變量數據,對象的成員變量數據實際存放在堆內存裏,而引用變量只是指向該堆內存裏的對象。引用變量和C中的指針很像。它們都是存儲一個地址值,通過這個地址來引用到實際對象。實際上,java中的引用就是C中的指針,只是java把指針封裝起來,避免開發者進行繁瑣的指針操作。
  
      如果堆內存裏的對象沒有任何變量指向該對象,那麼程序將無法再訪問該對象,這個對象也就變成了垃圾,java的垃圾回收機制將回收該對象,釋放該對象所佔的內存區。如果希望通知垃圾回收機制回收某個對象,只需切斷該對象的所有引用變量和它之間的關係即可,也就是把這些引用變量賦值爲null。

     this引用指向調用該方法的對象,其最大作用是讓類中一個方法,訪問該類裏的另一個飯國發或Field。
     例如:
public class Dog{
public void jump(){
System.out.println("正在執行jump方法");
}

public void run(){
this.jump();     //java中允許對象的一個成員直接調用另一個成員,可以省略this前綴。
System.out.println("正在執行run方法");
}
}
     特別的,static修飾的方法屬於類,不屬於對象,因此調用static修飾的方法的主調總是類本身,如果允許在static修飾的方法中出現this引用,那將導致this無法引用有效對象,導致變異錯誤。
      static修飾的成員屬於類本身,不屬於該類的實例,那就不應允許使用類的實例去調用static修飾的成員變量和方法。例如。
public lcass ThisInConstructor{
public int foo;
public ThisInConstructor(){
int foo = 0;                                   //大部分時候,普通方法訪問其他方法、成員變量時無需用this,但如果方法裏有個句柄變量
this.foo = 6;                                 //和成員變量同名時,但程序又需要在該方法裏訪問這個被覆蓋的成員變量,則必須使用this
}                                                             //印象最深的就是get和set方法
public static void main(String[] args){
//所有使用ThisInConstructor創建的對象的foo 成員變量都將被設爲6
//要在靜態方法中訪問另一個普通方法,只能重新創建一個對象。此處重新創建一個對象來調用info方法
System.out.println(new ThisInConstructor().foo );
}
}
發佈了27 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章