Java面試題集錦(21):成員變數與區域性變數
阿新 • • 發佈:2020-12-30
文章目錄
直接上程式碼
以下程式碼的執行結果?
class Exam {
static int s;//成員變數,類變數
int i;//成員變數,例項變數
int j;//成員變數,例項變數
{
int i=1;//非靜態程式碼塊中的區域性變數i
i++;j++;s++;
}
public void test(int j){//形參,區域性變數j
j++;i++;s++;
}
public static void main(String[] args) {//形參,區域性變數args
Exam o1=new Exam();//區域性變數o1
Exam o2=new Exam();//區域性變數o2
o1.test(10);
o1.test(20);
o2.test(30);
System.out.println(o1.i+","+o1.j+","+o1.s);
System.out.println(o2.i+"," +o2.j+","+o2.s);
}
}
區域性變數和類變數的區別
1.宣告的位置
- 區域性變數:方法體{}中 形參,程式碼塊{}中
- 成員變數:類中方法外。分為類變數(static修飾)和例項變數。
2.修飾符
- 區域性變數:只可能有final
- 成員變數:public、private、protected、final、static、volatile、transient等
3.值儲存的位置
- 區域性變數:棧
- 例項變數:堆
- 類變數:方法區
4.作用域
- 區域性變數:宣告處開始,到 } 結束
- 例項變數:在當前類中用this(有時可省)其他類中用“物件名.xxx”訪問
- 類變數:在當前類中用“類名.xxx”(有時可省)其他類中用“類名.xxx”或“物件名.xxx”訪問
5.宣告週期
- 區域性變數:每一個執行緒,每一次呼叫執行都是新的生命週期
- 例項變數:隨著物件的建立而初始化,隨著物件的被回收而消亡,每一個物件的例項變數都是獨立的
- 類變數:隨著類的建立而初始化,隨著類的解除安裝而消亡,該類的所有物件的類變數是共享的
區域性變數和類/例項變數重名
- 與例項變數重名:在例項變數前面加“this.”
- 與類變數重名:在類變數前面加“類名.”