成員變量、類變量、局部變量的區別


變量名首寫字母使用小寫,如果由多個單詞組成,從第2個單詞開始的其他單詞的首寫字母使用大寫。

如果局部變量的名字和成員變量的名字相同, 要想在該方法中使用成員變量,必須使用關鍵字this

 

[java]  view plain  copy
 
  1. class People {  
  2.     String name = "類體重定義的name";         //類中的成員變量並賦值  
  3.   
  4.     People(){  
  5.     }  
  6.       
  7.     public void speak() {  
  8.         String name = "類體方法中定義的name";       //在方法speak中定義和成員變量名字相同的name並賦值  
  9.         System.out.println(name);  
  10.         System.out.println(this.name);      //通過this來訪問類中的成員變量  
  11.           
  12.     }  
  13. }  
  14.   
  15.   
  16. public class TestThis {                              //源文件中只能有一個類是public類,並且源文件的名字必須與這個類的名字完全相同,如  
  17.                                                          //果沒有public類,那么源文件的名字只要和某個類的名字相同就可以了。  
  18.     public static void main(String[] args) {         
  19.         People myPeople = new People();  
  20.         myPeople.speak();  
  21.     }  
  22.   
  23. }  

輸出結果:

 

 

成員變量和局部變量的區別

 

       成員變量:

          1、成員變量定義在類中,在整個類中都可以被訪問。

          2、成員變量隨着對象的建立而建立,隨着對象的消失而消失,存在於對象所在的堆內存中。

          3、成員變量有默認初始化值。

      局部變量:

          1、局部變量只定義在局部范圍內,如:函數內,語句內等,只在所屬的區域有效。

          2、局部變量存在於棧內存中,作用的范圍結束,變量空間會自動釋放。

          3、局部變量沒有默認初始化值 

      在使用變量時需要遵循的原則為:就近原則

      首先在局部范圍找,有就使用;接着在成員位置找。

 

 

成員變量和類變量的區別


 

由static修飾的變量稱為靜態變量,其實質上就是一個全局變量。如果某個內容是被所有對象所共享,那么該內容就應該用靜態修飾;沒有被靜態修飾的內容,其實是屬於對象的特殊描述。

不同的對象的實例變量將被分配不同的內存空間, 如果類中的成員變量有類變量,那么所有對象的這個類變量都分配給相同的一處內存,改變其中一個對象的這個類變量會影響其他對象的這個類變量,也就是說對象共享類變量。

 

 

[java]  view plain  copy
 
  1. class MyAdd {  
  2.     int count = 0;          //成員變量計數器  
  3.     static int sum = 0;     //靜態變量計數器  
  4.     String name;  
  5.       
  6.   
  7.     MyAdd(String name){  
  8.         this.name = name;  
  9.     }  
  10.       
  11.     public void myAddMethod() {    
  12.         count++;  
  13.         System.out.println(name+"調用成員變量后的值:"+count);  
  14.     }  
  15.       
  16.     public void staticAddMethod() {    
  17.         sum++;  
  18.         System.out.println(name+"調用類后變量的值:"+sum);  
  19.     }  
  20.       
  21.       
  22. }  
  23.   
  24.   
  25. public class TestThis {  
  26.   
  27.     public static void main(String[] args) {  
  28.         MyAdd add1 = new MyAdd("add1");  
  29.         MyAdd add2 = new MyAdd("add2");  
  30.           
  31.         add1.myAddMethod();  
  32.         add2.myAddMethod();  
  33.         add1.myAddMethod();  
  34.         add1.staticAddMethod();  
  35.         add2.staticAddMethod();  
  36.         add1.staticAddMethod();  
  37.     }  
  38.   
  39. }  


輸出結果:

 

 

成員變量和類變量的區別:

   1、兩個變量的生命周期不同

      成員變量隨着對象的創建而存在,隨着對象的回收而釋放。

      靜態變量隨着類的加載而存在,隨着類的消失而消失。

   2、調用方式不同

      成員變量只能被對象調用。

      靜態變量可以被對象調用,還可以被類名調用。

   3、別名不同

      成員變量也稱為實例變量。

      靜態變量也稱為類變量。

   4、數據存儲位置不同

      成員變量存儲在堆內存的對象中,所以也叫對象的特有數據。

      靜態變量數據存儲在方法區(共享數據區)的靜態區,所以也叫對象的共享數據。

 

 

 

static:★★★ 關鍵字,是一個修飾符,用於修飾成員(成員變量和成員函數)。

   特點:

   1、想要實現對象中的共性數據的對象共享。可以將這個數據進行靜態修飾。

   2、被靜態修飾的成員,可以直接被類名所調用。也就是說,靜態的成員多了一種調用方式。類名.靜態方式。

    3、靜態隨着類的加載而加載。而且優先於對象存在。

 

弊端:

   1、有些數據是對象特有的數據,是不可以被靜態修飾的。因為那樣的話,特有數據會變成對象的共享數據。這樣對事物的描述就出了問題。所以,在定義靜態時,必須要明確,這個數據是否是被對象所共享的。

   2、靜態方法只能訪問靜態成員,不可以訪問非靜態成員。

      因為靜態方法加載時,優先於對象存在,所以沒有辦法訪問對象中的成員。

   3、靜態方法中不能使用this,super關鍵字。

      因為this代表對象,而靜態在時,有可能沒有對象,所以this無法使用。

 

什么時候定義靜態成員呢?或者說:定義成員時,到底需不需要被靜態修飾呢?

成員分兩種:

   1、成員變量。(數據共享時靜態化)

      該成員變量的數據是否是所有對象都一樣:

      如果是,那么該變量需要被靜態修飾,因為是共享的數據。 

      如果不是,那么就說這是對象的特有數據,要存儲到對象中。 

   2、成員函數。(方法中沒有調用特有數據時就定義成靜態)

      如果判斷成員函數是否需要被靜態修飾呢?

      只要參考,該函數內是否訪問了對象中的特有數據:

      如果有訪問特有數據,那方法不能被靜態修飾。

      如果沒有訪問過特有數據,那么這個方法需要被靜態修飾。

 

成員變量和靜態變量的區別:

   1、成員變量所屬於對象。所以也稱為實例變量。

      靜態變量所屬於類。所以也稱為類變量。

   2、成員變量存在於堆內存中。

      靜態變量存在於方法區中。

   3、成員變量隨着對象創建而存在。隨着對象被回收而消失。

      靜態變量隨着類的加載而存在。隨着類的消失而消失。

   4、成員變量只能被對象所調用 。

      靜態變量可以被對象調用,也可以被類名調用。

   所以,成員變量可以稱為對象的特有數據,靜態變量稱為對象的共享數據。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM