1.java全局變量
1.1 概述
Java中的全局變量通常是指定義在類級別上的變量,也稱為類變量或靜態(tài)變量。它們與對象實例無關(guān),而是與類相關(guān)聯(lián)的變量。這意味著無論創(chuàng)建多少個對象,類變量的值都是相同的。類變量可以在整個類中使用,并且可以通過類名直接訪問。
要定義一個類變量,需要在變量聲明之前添加關(guān)鍵字“static”。例如:
public class MyClass {
static int globalVariable = 10;
}
在上面的示例中,globalVariable是一個類變量,它被定義為一個整數(shù),并初始化為10。該變量可以通過類名訪問,如下所示:
MyClass.globalVariable = 20;
類變量可以在類中的任何地方使用,并且對于所有對象都是相同的。這使得它們成為在整個類中共享數(shù)據(jù)的有用工具。
1.2 特點
Java的全局變量,也稱為成員變量或類變量,是在類中定義的變量,可以被類的所有方法和對象訪問。以下是Java全局變量的特點:
1.生命周期:全局變量在類定義的生命周期內(nèi)存在,即在對象創(chuàng)建前就已經(jīng)存在,直到程序結(jié)束或類被卸載時才被銷毀。
2.默認(rèn)值:如果沒有給全局變量賦初值,則它們將默認(rèn)初始化為0或null,具體取決于變量的類型。
3.可見性:全局變量可以在類的所有方法中訪問,包括靜態(tài)和非靜態(tài)方法。
4.作用域:全局變量的作用域是整個類,可以在類的任何方法中使用。
5.靜態(tài)性:可以使用static關(guān)鍵字將全局變量聲明為靜態(tài)變量,這樣它們將成為類變量,而不是對象變量。靜態(tài)變量只有一個副本,被類的所有對象所共享,因此它們可以在不創(chuàng)建對象的情況下訪問。
6.可變性:全局變量可以是可變的或不可變的,這取決于它們的數(shù)據(jù)類型。如果全局變量是一個對象,則可以更改該對象的狀態(tài),即使變量本身是final類型。
總之,全局變量是Java中非常重要的一種數(shù)據(jù)類型,它們可以讓變量在類的范圍內(nèi)存在,并且可以在整個類中使用。因此,它們可以被用來存儲對整個類有意義的數(shù)據(jù),或者作為類的狀態(tài)的標(biāo)志。
1.3 案例
以下是一個使用全局變量的Java示例:
public static void main(String[] args) {
// 在 main 方法中訪問全局變量
System.out.println("全局變量的值為: " + globalVariable);
// 調(diào)用方法來修改全局變量的值
modifyGlobalVariable();
// 再次訪問全局變量來查看其值是否被修改
System.out.println("修改后的全局變量的值為: " + globalVariable);
}
public static void modifyGlobalVariable() {
// 在方法中修改全局變量的值
globalVariable = 20;
}
在這個例子中,我們聲明了一個名為 globalVariable 的靜態(tài)全局變量,它的值為 10。我們?nèi)缓笤?main 方法中訪問這個全局變量,并將其值打印出來。
接下來,我們調(diào)用 modifyGlobalVariable 方法來修改全局變量的值。在這個方法中,我們將 globalVariable 的值改為 20。
最后,我們再次訪問 globalVariable 來檢查它的值是否已被修改,并將其值打印出來。
注意,在 Java 中,靜態(tài)全局變量必須使用 static 關(guān)鍵字進行聲明,以便在其他靜態(tài)方法中訪問它。
1.4 java全局變量的存儲區(qū)域
●Java中的全局變量(即靜態(tài)變量)存儲在Java虛擬機(JVM)的方法區(qū)中。方法區(qū)是一種在JVM中用于存儲類信息、常量、靜態(tài)變量等數(shù)據(jù)的內(nèi)存區(qū)域。在JVM啟動時,方法區(qū)被分配,其大小可以根據(jù)需要進行調(diào)整。
●由于方法區(qū)是在JVM中共享的,因此所有實例都可以訪問相同的全局變量。因此,全局變量也稱為類變量,因為它們與整個類相關(guān)聯(lián),而不是與任何特定實例相關(guān)聯(lián)。全局變量在類被加載時初始化,并且可以通過類名來訪問,而不需要創(chuàng)建類的實例。
2.局部變量
2.1 概述
局部變量是在定義形參、方法或代碼塊內(nèi)部的變量,該變量只在當(dāng)前方法、代碼塊中有效。
2.2特點
局部變量具有如下特點:
●局部變量聲明在方法、構(gòu)造方法或者代碼塊、形參中;
●局部變量在方法、構(gòu)造方法、或者語句塊被執(zhí)行時創(chuàng)建,當(dāng)它們執(zhí)行完成后,局部變量就會被銷毀;
●訪問修飾符不能添加在局部變量上;
●局部變量只在聲明它的方法、構(gòu)造方法或者代碼塊、形參中可見;
●局部變量是在棧上分配的;
●局部變量沒有默認(rèn)值,所以局部變量被聲明后,必須經(jīng)過初始化,才可以使用。
2.3 案例
在下面的案例中,給大家定義了幾個局部變量供大家參考。
//args也是一種局部變量,在main(){}方法的{}范圍內(nèi)有效
public static void main(String[] args) {
int a = 10;//局部變量,在main(){}方法的{}范圍內(nèi)有效
System.out.println("a=" + a);
}
public void showAge() {
//i也是一種局部變量,只在for(){}這對{}范圍內(nèi)
for(int i=0;i<100;i++) {
System.out.println("age=" + age);
}
}
2.4 java局部變量的存儲區(qū)域
●Java 中的局部變量存儲在棧(stack)內(nèi)存中。棧是一種后進先出的數(shù)據(jù)結(jié)構(gòu),用于存儲方法調(diào)用時的局部變量、方法參數(shù)和返回值等數(shù)據(jù)。當(dāng)一個方法被調(diào)用時,會為該方法在棧上分配一塊內(nèi)存空間,用于存儲該方法的局部變量和方法參數(shù)。當(dāng)方法執(zhí)行完畢后,該方法的棧幀就會被銷毀,該方法的局部變量和方法參數(shù)也就隨之被釋放。因此,局部變量的生命周期與方法的生命周期相同,只在方法內(nèi)部有效。
3.總結(jié)
至此,最后給大家總結(jié)下局部變量和成員變量的區(qū)別,大家一定多上手練一練哈,這樣才能加深印象:
相同點:
1.定義變量的格式相同;
2.先聲明后使用;
3.變量都有對應(yīng)的作用域。
不同點:
兩者聲明的位置及作用范圍不同,如下表所示:
成員變量 直接定義在類中,根據(jù)修飾符的不同,可以在當(dāng)前類或其他類中有效。
局部變量 定義在方法的形參、方法內(nèi)部、代碼塊內(nèi)部的變量。只在當(dāng)前方法及代碼塊內(nèi)部有效。