變量名首寫字母使用小寫,如果由多個單詞組成,從第2個單詞開始的其他單詞的首寫字母使用大寫。 如果局部變量的名字和成員變量的名字相同, 要想在該方法中使用成員變量,必須使用關鍵字this。
class People { String name = "類體重定義的name"; //類中的成員變量并賦值 People(){ } public void speak() { String name = "類體方法中定義的name"; //在方法speak中定義和成員變量名字相同的name并賦值 System.out.PRintln(name); System.out.println(this.name); //通過this來訪問類中的成員變量 } } public class TestThis { //源文件中只能有一個類是public類,并且源文件的名字必須與這個類的名字完全相同,如 //果沒有public類,那么源文件的名字只要和某個類的名字相同就可以了。 public static void main(String[] args) { People myPeople = new People(); myPeople.speak(); } }成員變量和局部變量的區(qū)別
成員變量: 1、成員變量定義在類中,在整個類中都可以被訪問。 2、成員變量隨著對象的建立而建立,隨著對象的消失而消失,存在于對象所在的堆內(nèi)存中。 3、成員變量有默認初始化值。
局部變量: 1、局部變量只定義在局部范圍內(nèi),如:函數(shù)內(nèi),語句內(nèi)等,只在所屬的區(qū)域有效。 2、局部變量存在于棧內(nèi)存中,作用的范圍結束,變量空間會自動釋放。 3、局部變量沒有默認初始化值 在使用變量時需要遵循的原則為:就近原則 首先在局部范圍找,有就使用;接著在成員位置找。
成員變量和類變量的區(qū)別
由static修飾的變量稱為靜態(tài)變量,其實質(zhì)上就是一個全局變量。如果某個內(nèi)容是被所有對象所共享,那么該內(nèi)容就應該用靜態(tài)修飾;沒有被靜態(tài)修飾的內(nèi)容,其實是屬于對象的特殊描述。 不同的對象的實例變量將被分配不同的內(nèi)存空間, 如果類中有類變量,那么所有對象的這個類變量都分配給相同的一處內(nèi)存,改變其中一個對象的這個類變量會影響其他對象的這個類變量,也就是說對象共享類變量。
class MyAdd { int count = 0; //成員變量計數(shù)器 static int sum = 0; //靜態(tài)變量計數(shù)器 String name; MyAdd(String name){ this.name = name; } public void myAddMethod() { count++; System.out.println(name+"調(diào)用成員變量后的值:"+count); } public void staticAddMethod() { sum++; System.out.println(name+"調(diào)用類后變量的值:"+sum); } } public class TestThis { public static void main(String[] args) { MyAdd add1 = new MyAdd("add1"); MyAdd add2 = new MyAdd("add2"); add1.myAddMethod(); add2.myAddMethod(); add1.myAddMethod(); add1.staticAddMethod(); add2.staticAddMethod(); add1.staticAddMethod(); } }上述方法的內(nèi)存結構示意圖:
成員變量和類變量的區(qū)別: 1、兩個變量的生命周期不同 成員變量隨著對象的創(chuàng)建而存在,隨著對象的回收而釋放。 靜態(tài)變量隨著類的加載而存在,隨著類的消失而消失。 2、調(diào)用方式不同 成員變量只能被對象調(diào)用。 靜態(tài)變量可以被對象調(diào)用,還可以被類名調(diào)用。 3、別名不同 成員變量也稱為實例變量。 靜態(tài)變量也稱為類變量。 4、數(shù)據(jù)存儲位置不同 成員變量存儲在堆內(nèi)存的對象中,所以也叫對象的特有數(shù)據(jù)。 靜態(tài)變量數(shù)據(jù)存儲在方法區(qū)(共享數(shù)據(jù)區(qū))的靜態(tài)區(qū),所以也叫對象的共享數(shù)據(jù)。
static:★★★ 關鍵字,是一個修飾符,用于修飾成員(成員變量和成員函數(shù))。 特點: 1、想要實現(xiàn)對象中的共性數(shù)據(jù)的對象共享??梢詫⑦@個數(shù)據(jù)進行靜態(tài)修飾。 2、被靜態(tài)修飾的成員,可以直接被類名所調(diào)用。也就是說,靜態(tài)的成員多了一種調(diào)用方式。類名.靜態(tài)方式。 3、靜態(tài)隨著類的加載而加載。而且優(yōu)先于對象存在。
弊端: 1、有些數(shù)據(jù)是對象特有的數(shù)據(jù),是不可以被靜態(tài)修飾的。因為那樣的話,特有數(shù)據(jù)會變成對象的共享數(shù)據(jù)。這樣對事物的描述就出了問題。所以,在定義靜態(tài)時,必須要明確,這個數(shù)據(jù)是否是被對象所共享的。 2、靜態(tài)方法只能訪問靜態(tài)成員,不可以訪問非靜態(tài)成員。 因為靜態(tài)方法加載時,優(yōu)先于對象存在,所以沒有辦法訪問對象中的成員。 3、靜態(tài)方法中不能使用this,super關鍵字。 因為this代表對象,而靜態(tài)在時,有可能沒有對象,所以this無法使用。
什么時候定義靜態(tài)成員呢?或者說:定義成員時,到底需不需要被靜態(tài)修飾呢? 成員分兩種: 1、成員變量。(數(shù)據(jù)共享時靜態(tài)化) 該成員變量的數(shù)據(jù)是否是所有對象都一樣: 如果是,那么該變量需要被靜態(tài)修飾,因為是共享的數(shù)據(jù)。 如果不是,那么就說這是對象的特有數(shù)據(jù),要存儲到對象中。 2、成員函數(shù)。(方法中沒有調(diào)用特有數(shù)據(jù)時就定義成靜態(tài)) 如果判斷成員函數(shù)是否需要被靜態(tài)修飾呢? 只要參考,該函數(shù)內(nèi)是否訪問了對象中的特有數(shù)據(jù): 如果有訪問特有數(shù)據(jù),那方法不能被靜態(tài)修飾。 如果沒有訪問過特有數(shù)據(jù),那么這個方法需要被靜態(tài)修飾。
成員變量和靜態(tài)變量的區(qū)別: 1、成員變量所屬于對象。所以也稱為實例變量。 靜態(tài)變量所屬于類。所以也稱為類變量。 2、成員變量存在于堆內(nèi)存中。 靜態(tài)變量存在于方法區(qū)中。 3、成員變量隨著對象創(chuàng)建而存在。隨著對象被回收而消失。 靜態(tài)變量隨著類的加載而存在。隨著類的消失而消失。 4、成員變量只能被對象所調(diào)用 。 靜態(tài)變量可以被對象調(diào)用,也可以被類名調(diào)用。 所以,成員變量可以稱為對象的特有數(shù)據(jù),靜態(tài)變量稱為對象的共享數(shù)據(jù)。
新聞熱點
疑難解答