1. 程式人生 > 其它 >Java面試題集錦(21):成員變數與區域性變數

Java面試題集錦(21):成員變數與區域性變數

技術標籤:JavaSE面試題面向物件程式設計java

文章目錄

直接上程式碼

以下程式碼的執行結果?

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.”
  • 與類變數重名:在類變數前面加“類名.”