變量名首寫字母使用小寫,如果由多個單詞組成,從第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();
- }
- }
輸出結果:
成員變量和局部變量的區別
成員變量:
1、成員變量定義在類中,在整個類中都可以被訪問。
2、成員變量隨着對象的建立而建立,隨着對象的消失而消失,存在於對象所在的堆內存中。
3、成員變量有默認初始化值。
局部變量:
1、局部變量只定義在局部范圍內,如:函數內,語句內等,只在所屬的區域有效。
2、局部變量存在於棧內存中,作用的范圍結束,變量空間會自動釋放。
3、局部變量沒有默認初始化值
在使用變量時需要遵循的原則為:就近原則
首先在局部范圍找,有就使用;接着在成員位置找。
成員變量和類變量的區別
由static修飾的變量稱為靜態變量,其實質上就是一個全局變量。如果某個內容是被所有對象所共享,那么該內容就應該用靜態修飾;沒有被靜態修飾的內容,其實是屬於對象的特殊描述。
不同的對象的實例變量將被分配不同的內存空間, 如果類中的成員變量有類變量,那么所有對象的這個類變量都分配給相同的一處內存,改變其中一個對象的這個類變量會影響其他對象的這個類變量,也就是說對象共享類變量。
- class MyAdd {
- int count = 0; //成員變量計數器
- static int sum = 0; //靜態變量計數器
- String name;
- MyAdd(String name){
- this.name = name;
- }
- public void myAddMethod() {
- count++;
- System.out.println(name+"調用成員變量后的值:"+count);
- }
- public void staticAddMethod() {
- sum++;
- System.out.println(name+"調用類后變量的值:"+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();
- }
- }
輸出結果:
成員變量和類變量的區別:
1、兩個變量的生命周期不同
成員變量隨着對象的創建而存在,隨着對象的回收而釋放。
靜態變量隨着類的加載而存在,隨着類的消失而消失。
2、調用方式不同
成員變量只能被對象調用。
靜態變量可以被對象調用,還可以被類名調用。
3、別名不同
成員變量也稱為實例變量。
靜態變量也稱為類變量。
4、數據存儲位置不同
成員變量存儲在堆內存的對象中,所以也叫對象的特有數據。
靜態變量數據存儲在方法區(共享數據區)的靜態區,所以也叫對象的共享數據。
static:★★★ 關鍵字,是一個修飾符,用於修飾成員(成員變量和成員函數)。
特點:
1、想要實現對象中的共性數據的對象共享。可以將這個數據進行靜態修飾。
2、被靜態修飾的成員,可以直接被類名所調用。也就是說,靜態的成員多了一種調用方式。類名.靜態方式。
3、靜態隨着類的加載而加載。而且優先於對象存在。
弊端:
1、有些數據是對象特有的數據,是不可以被靜態修飾的。因為那樣的話,特有數據會變成對象的共享數據。這樣對事物的描述就出了問題。所以,在定義靜態時,必須要明確,這個數據是否是被對象所共享的。
2、靜態方法只能訪問靜態成員,不可以訪問非靜態成員。
因為靜態方法加載時,優先於對象存在,所以沒有辦法訪問對象中的成員。
3、靜態方法中不能使用this,super關鍵字。
因為this代表對象,而靜態在時,有可能沒有對象,所以this無法使用。
什么時候定義靜態成員呢?或者說:定義成員時,到底需不需要被靜態修飾呢?
成員分兩種:
1、成員變量。(數據共享時靜態化)
該成員變量的數據是否是所有對象都一樣:
如果是,那么該變量需要被靜態修飾,因為是共享的數據。
如果不是,那么就說這是對象的特有數據,要存儲到對象中。
2、成員函數。(方法中沒有調用特有數據時就定義成靜態)
如果判斷成員函數是否需要被靜態修飾呢?
只要參考,該函數內是否訪問了對象中的特有數據:
如果有訪問特有數據,那方法不能被靜態修飾。
如果沒有訪問過特有數據,那么這個方法需要被靜態修飾。
成員變量和靜態變量的區別:
1、成員變量所屬於對象。所以也稱為實例變量。
靜態變量所屬於類。所以也稱為類變量。
2、成員變量存在於堆內存中。
靜態變量存在於方法區中。
3、成員變量隨着對象創建而存在。隨着對象被回收而消失。
靜態變量隨着類的加載而存在。隨着類的消失而消失。
4、成員變量只能被對象所調用 。
靜態變量可以被對象調用,也可以被類名調用。
所以,成員變量可以稱為對象的特有數據,靜態變量稱為對象的共享數據。