更新時(shí)間:2021-08-03 來(lái)源:黑馬程序員 瀏覽量:
IT就到黑馬程序員.gif)
Java中被final修飾的變量被稱之為常量,它只能被賦值一次,也就是說(shuō)final修飾的變量一旦被賦值,其值不能改變。如果再次對(duì)該變量進(jìn)行賦值,則程序會(huì)在編譯時(shí)報(bào)錯(cuò)。接下來(lái)通過(guò)一個(gè)案例來(lái)進(jìn)行驗(yàn)證,如文件1所示。
文件1 Example10.java
public class Example10 {
public static void main(String[] args) {
final int num = 2; // 第一次可以賦值
num = 4; // 再次賦值會(huì)報(bào)錯(cuò)
}
}程序編譯報(bào)錯(cuò),如圖1所示。

圖1 運(yùn)行結(jié)果
文件1中,當(dāng)在第4行再次對(duì)num賦值時(shí),程序出現(xiàn)了“The final local variable num cannot be assigned. It must be blank and not using a compound assignment(final變量num無(wú)法被重新賦值)”的錯(cuò)誤。由此可見(jiàn),被final修飾的變量為常量,它只能被賦值一次,其值不可改變。
文件1中,演示的是局部變量被final修飾的情況,當(dāng)局部變量使用final關(guān)鍵字進(jìn)行修飾時(shí),可以在聲明變量的同時(shí)對(duì)變量進(jìn)行賦值,也可以先聲明變量然后再進(jìn)行有且只有一次的賦值。而當(dāng)成員變量被final修飾時(shí),在聲明變量的同時(shí)必須進(jìn)行初始化賦值,否則程序編譯報(bào)錯(cuò),接下來(lái)通過(guò)一個(gè)案例來(lái)演示final修飾成員變量和局部變量的情況,如文件2所示。
文件2 Example11.java
public class Example11 {
// final修飾的成員變量,必須在聲明的同時(shí)進(jìn)行賦值,否則編譯錯(cuò)誤
final int m;
public static void main(String[] args) {
// final修飾的局部變量,可以先聲明,再進(jìn)行一次賦值
final int n;
n = 4;
}
}程序編譯報(bào)錯(cuò),如圖2所示。

圖2 運(yùn)行結(jié)果
從圖2可以看出,程序出現(xiàn)了編譯錯(cuò)誤,并提示“The blank final field m may not have been initialized(final修飾的變量m沒(méi)有初始化)”。這是因?yàn)槭褂胒inal關(guān)鍵字修飾成員變量時(shí),Java虛擬機(jī)不會(huì)對(duì)其進(jìn)行初始化。因此使用final修飾成員變量時(shí),需要在定義變量的同時(shí)賦予一個(gè)初始值,下面將第3行代碼修改為:
final int m = 0; // 為final修飾的成員變量m初始化賦值
保存后,Eclipse的編輯器將不會(huì)提示錯(cuò)誤。
final關(guān)鍵字的作用是什么?Java中的final用法
1024首播|39歲程序員逆襲記:不被年齡定義,AI浪潮里再迎春天
2025-10-241024程序員節(jié)丨10年同行,致敬用代碼改變世界的你
2025-10-24【AI設(shè)計(jì)】北京143期畢業(yè)僅36天,全員拿下高薪offer!黑馬AI設(shè)計(jì)連續(xù)6期100%高薪就業(yè)
2025-09-19【跨境電商運(yùn)營(yíng)】深圳跨境電商運(yùn)營(yíng)畢業(yè)22個(gè)工作日,就業(yè)率91%+,最高薪資達(dá)13500元
2025-09-19【AI運(yùn)維】鄭州運(yùn)維1期就業(yè)班,畢業(yè)14個(gè)工作日,班級(jí)93%同學(xué)已拿到Offer, 一線均薪資 1W+
2025-09-19【AI鴻蒙開(kāi)發(fā)】上海校區(qū)AI鴻蒙開(kāi)發(fā)4期5期,距離畢業(yè)21天,就業(yè)率91%,平均薪資14046元
2025-09-19