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