Java學(xué)習(xí)之局部變量、成員變量舉例詳解
1. 什么是成員變量?什么是局部變量?
局部變量和成員變量是兩種常見(jiàn)的變量類(lèi)型,它們?cè)谧饔糜?、生命周期、初始化等方面有顯著的區(qū)別。理解這兩者的區(qū)別對(duì)于編寫(xiě)清晰和高效的 Java 程序至關(guān)重要。
創(chuàng)建局部變量,然后打印局部變量:
public static void main(String[] args){ String brand; // 品牌 String color ; // 顏色 int memory; // 內(nèi)存 System.out.println("brand:"+ brand); System.out.println("color:"+ color); System.out.println("memory:"+ memory); }
不初始化就會(huì)報(bào)錯(cuò)。
創(chuàng)建一個(gè)類(lèi),在類(lèi)中創(chuàng)建成員變量,然后創(chuàng)建對(duì)象,打印出對(duì)象的成員變量:
public class Phone { String brand; // 品牌 String color ; // 顏色 int memory; // 內(nèi)存 // 程序的開(kāi)始 public static void main(String[] args){ Phone p = new Phone(); System.out.println("brand:"+ p.brand); System.out.println("color:"+p.color); System.out.println("memory:"+p.memory); } }
不初始化,而打印出了值。

通過(guò)上述的兩個(gè)測(cè)試,我們可以發(fā)現(xiàn),在類(lèi)中創(chuàng)建的成員變量有默認(rèn)值,即,成員變量不用初始化就會(huì)有一個(gè)值,而局部變量必須手動(dòng)賦值。
2. 成員變量
2.1 定義和特點(diǎn)
成員變量是類(lèi)中的字段(屬性),它們是類(lèi)的組成部分。
成員變量有兩種類(lèi)型:
- 實(shí)例變量 (Instance Variables):屬于類(lèi)的實(shí)例(對(duì)象),每個(gè)對(duì)象有一份獨(dú)立的實(shí)例變量。
- 類(lèi)變量 (Class Variables):使用 static 關(guān)鍵字聲明,屬于類(lèi)本身,而不是類(lèi)的任何實(shí)例。
2.2 實(shí)例變量
- 實(shí)例變量是類(lèi)中定義的字段,每個(gè)類(lèi)的實(shí)例(對(duì)象)都有自己的實(shí)例變量副本。
- 實(shí)例變量在對(duì)象創(chuàng)建時(shí)被分配內(nèi)存,每個(gè)對(duì)象都有獨(dú)立的實(shí)例變量。
- 實(shí)例變量具有默認(rèn)值:如果未顯式初始化,實(shí)例變量會(huì)根據(jù)其類(lèi)型自動(dòng)賦予默認(rèn)值(例如,int 類(lèi)型默認(rèn)為 0,boolean 默認(rèn)為 false,對(duì)象引用類(lèi)型默認(rèn)為 null)。
- 實(shí)例變量在類(lèi)的實(shí)例化期間存在,當(dāng)對(duì)象被銷(xiāo)毀時(shí),實(shí)例變量也會(huì)被銷(xiāo)毀。
示例:
public class Example {
private int x; // 實(shí)例變量 默認(rèn)值為0
public void printX() {
System.out.println(x); // 訪問(wèn)實(shí)例變量
}
}在這個(gè)例子中,x 是實(shí)例變量。每當(dāng)你創(chuàng)建一個(gè) Example 對(duì)象時(shí),都會(huì)為每個(gè)對(duì)象分配一個(gè) x 變量,并且每個(gè)對(duì)象有自己的 x 值。
2.3 類(lèi)變量
- 類(lèi)變量使用 static 關(guān)鍵字聲明,它們屬于類(lèi)本身,而不是類(lèi)的實(shí)例。
- 類(lèi)變量在類(lèi)加載時(shí)就會(huì)被初始化,并且所有類(lèi)的實(shí)例共享同一個(gè)類(lèi)變量。
- 類(lèi)變量有默認(rèn)值,如果未顯式初始化,它們也會(huì)被賦予默認(rèn)值(與實(shí)例變量相同)。
示例:
public class Example {
static int count; // 類(lèi)變量
public void increment() {
count++; // 訪問(wèn)類(lèi)變量
}
}
在這個(gè)例子中,count 是類(lèi)變量。所有Example 類(lèi)的實(shí)例共享同一個(gè) count 變量,類(lèi)變量在類(lèi)加載時(shí)初始化。
2.4 成員變量的默認(rèn)值
| 數(shù)據(jù)類(lèi)型 | 默認(rèn)值 |
|---|---|
| byte | 0 |
| char | ‘\u0000’ |
| short | 0 |
| int | 0 |
| long | 0L |
| boolean | false |
| float | 0.0f |
| double | 0.0 |
| reference | null |
3. 局部變量
3.1 定義和特點(diǎn)
- 局部變量是在方法、構(gòu)造方法、或者代碼塊內(nèi)定義的變量。
- 局部變量的作用域僅限于它們被聲明的代碼塊或方法。
- 局部變量沒(méi)有默認(rèn)值,必須在使用前初始化。
- 局部變量的生命周期從其定義開(kāi)始,到方法或者代碼塊執(zhí)行完畢時(shí)結(jié)束。換句話(huà)說(shuō),局部變量只存在于方法或代碼塊的執(zhí)行過(guò)程中,一旦方法返回或代碼塊執(zhí)行完畢,局部變量會(huì)被銷(xiāo)毀。
3.2 示例和說(shuō)明
public class Example {
public void myMethod() {
int x = 10; // x 是局部變量 必須要被初始化
System.out.println(x); // 可以使用局部變量
}
}在這個(gè)例子中,x 是局部變量,它只在 myMethod() 方法內(nèi)部存在。當(dāng)方法執(zhí)行完畢,x 會(huì)被銷(xiāo)毀。
關(guān)鍵特點(diǎn):
- 作用域:局部變量的作用域限制在其所在的方法、構(gòu)造方法或代碼塊內(nèi)。
- 初始化:局部變量在使用前必須被顯式初始化。否則,編譯器會(huì)報(bào)錯(cuò)。
- 生命周期:局部變量的生命周期是方法或者代碼塊的執(zhí)行周期,即方法/代碼塊開(kāi)始執(zhí)行時(shí)創(chuàng)建,結(jié)束時(shí)銷(xiāo)毀。
注意事項(xiàng):
- 局部變量的作用域僅限于方法內(nèi),因此它不能被方法外部訪問(wèn)。
- 局部變量不能聲明為 static,因?yàn)樗纳芷谂c方法的調(diào)用有關(guān),而不是與類(lèi)的實(shí)例或類(lèi)本身的生命周期有關(guān)。
4. 局部變量 vs 成員變量
| 特性 | 局部變量 | 成員變量 (實(shí)例變量/類(lèi)變量) |
|---|---|---|
| 定義位置 | 方法、構(gòu)造器、代碼塊中 | 類(lèi)中,方法外 |
| 初始化 | 必須顯式初始化 | 會(huì)自動(dòng)初始化為默認(rèn)值(實(shí)例變量/類(lèi)變量) |
| 作用域 | 僅限于所在的方法/代碼塊 | 實(shí)例變量:限于對(duì)象;類(lèi)變量:限于類(lèi) |
| 生命周期 | 方法/代碼塊執(zhí)行期間 | 實(shí)例變量:對(duì)象的生命周期;類(lèi)變量:類(lèi)的生命周期 |
| 訪問(wèn)修飾符 | 無(wú)法使用訪問(wèn)修飾符 | 可以使用訪問(wèn)修飾符 public、private 等 |
| 是否與類(lèi)相關(guān) | 無(wú) | 實(shí)例變量與對(duì)象相關(guān);類(lèi)變量與類(lèi)本身相關(guān) |
| 靜態(tài)關(guān)鍵字 | 不可以是 static | 類(lèi)變量必須是 static |
局部變量:只在方法、構(gòu)造方法、或代碼塊內(nèi)有效,必須顯式初始化,并且生命周期僅限于方法或代碼塊執(zhí)行時(shí)。
成員變量:包括實(shí)例變量和類(lèi)變量,實(shí)例變量屬于對(duì)象,類(lèi)變量屬于類(lèi),成員變量有默認(rèn)值,生命周期較長(zhǎng),且可以使用訪問(wèn)修飾符來(lái)控制訪問(wèn)權(quán)限。
總結(jié)
到此這篇關(guān)于Java學(xué)習(xí)之局部變量、成員變量的文章就介紹到這了,更多相關(guān)Java局部變量、成員變量?jī)?nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java實(shí)現(xiàn)ArrayList排序的方法詳解
Java中常見(jiàn)的ArrayList排序方法主要為三種:JDK8的stream、Comparator#compare()和Comparable#compareTo(),本文將詳解這三者的使用,需要的可以參考一下2022-05-05
解析Java中所有錯(cuò)誤和異常的父類(lèi)java.lang.Throwable
這篇文章主要介紹了Java中所有錯(cuò)誤和異常的父類(lèi)java.lang.Throwable,文章中簡(jiǎn)單地分析了其源碼,說(shuō)明在代碼注釋中,需要的朋友可以參考下2016-03-03
java如何讀取某個(gè)文件夾中的全部文件(包括子文件夾)
這篇文章主要介紹了java如何讀取某個(gè)文件夾中的全部文件(包括子文件夾),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12
nacos使用占位符${}進(jìn)行參數(shù)配置的方法
這篇文章主要介紹了nacos如何使用占位符${}進(jìn)行參數(shù)配置,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-12-12

