切換語言為:簡體

Java中的成員變數與區域性變數區別以及使用注意事項

  • 爱糖宝
  • 2024-06-05
  • 2096
  • 0
  • 0

成員變數就是在類中宣告的變數,也稱為例項變數,它們儲存在堆記憶體當中,可以被類的所有方法訪問。
區域性變數就是在方法、建構函式或程式碼塊中定義的變數,只能在其所屬的作用域內使用,它們儲存在棧記憶體中,當其所屬的方法執行完畢後就會被銷燬。

1.成員變數

成員變數分為靜態變數和例項變數兩種。
類變數是所有物件共有,其中一個物件將它值改變,其他物件得到的就是改變後的結果;而例項變數則為物件私有,某一個物件將其值改變,不影響其他物件。

靜態變數(類變數)

靜態變數是被 static 修飾的,它從該類的準備階段就存在了,直到系統銷燬這個類,靜態變數的作用域與這個類的生存範圍相同;

static String name; //靜態變數

訪問方法:

  • 類.靜態變數:

Student.name="張三";
System.out.println(Student.name);//輸出:張三

  • 例項.靜態變數(不推薦):

Student s1=new Student();
Student s2=new Student();
//一般不推薦這樣引用靜態成員變數:
可以在類的多個方法中共享資料,提高程式碼的靈活性和複用性。
物件的狀態可以透過成員變數來描述和記錄。
區域性變數:
節省記憶體空間,避免長時間佔用記憶體。
提供了臨時儲存資料的功能,方便控制程式流程。變數
s1.name="amber";
s2.name="doris";
System.out.println(s1.name);//輸出的是doris,因為兩個例項指向的是同一個靜態變數

例項變數

例項變數沒有 static 修飾,它從該類的例項被建立時就存在,直到系統銷燬這個例項,例項變數的作用域與對應例項的生存範圍相同

int age;//例項變數

訪問方法:

  • 例項.例項變數:

Student s1=new Student();
Student s2=new Student();
s1.age=15;
s2.age=18;
System.out.println(s1.age); //輸出:15
System.out.println(s2.age); //輸出:18

2.區域性變數

區域性變數僅作用在區域性區域中,從定義開始到大括號或者 return 結束,生命週期短。區域性變數可以先定義再初始化,也可以定義的同時初始化,區域性變數沒有預設初始值,必須要初始化值後才能使用。

錯誤示例:

public void test(){
    int height;//區域性變數
    System.out.println(height);//報錯,此時height變數並沒有初始化
}

修改後程式碼:

public void test(){
    int height=185;//區域性變數
    System.out.println(height);//height有初始值,故輸出185
}

成員變數和區域性變數的位置對比

public class Student {
    static String name; //類變數
    int age;  //例項變數
    public void test(){
        int height;  //成員變數
        height=180;
        System.out.println(height);
    }
}

3.成員變數和區域性變數區別大總結


區別 成員變數 區域性變數
作用域 整個類 在其所屬的方法、建構函式或程式碼塊內
儲存位置 堆記憶體 棧記憶體
生命週期 與物件相同,當物件被銷燬時纔會釋放 僅限於其所屬方法、建構函式或程式碼塊的執行期間
類中宣告的位置 類中方法外 通常在方法中
預設值 有預設初始值(如 int 型別為 0) 沒有預設初始值,必須初始化後才能使用


4.兩者使用的注意事項

成員變數的注意事項

  • 應該根據需求選擇合適的訪問修飾符(如 private、protected、public)來控制其可見性。

  • 需要考慮執行緒安全問題,可以使用 synchronized 關鍵字或其他同步機制進行保護。

區域性變數的注意事項

  • 在使用前必須顯式初始化,否則會編譯錯誤。

  • 不同的方法中可以使用相同名稱的區域性變數,但不會產生衝突,因為它們具有不同的作用域。

成員變數可以在類的多個方法中共享資料,提高程式碼的靈活性和複用性,物件的狀態可以透過成員變數來描述和記錄。區域性變數節省記憶體空間,避免長時間佔用記憶體,提供了臨時儲存資料的功能,方便控制程式流程。二者都是 Java 中常用的變數型別,合理使用它們可以更好地管理我們的資料和程式流程。

0則評論

您的電子郵件等資訊不會被公開,以下所有項目均必填

OK! You can skip this field.