首頁技術(shù)文章正文

final關(guān)鍵字只能賦值一次不能多次賦值?

更新時(shí)間:2021-08-03 來源:黑馬程序員 瀏覽量:

IT培訓(xùn)班

Java中被final修飾的變量被稱之為常量,它只能被賦值一次,也就是說final修飾的變量一旦被賦值,其值不能改變。如果再次對該變量進(jìn)行賦值,則程序會(huì)在編譯時(shí)報(bào)錯(cuò)。接下來通過一個(gè)案例來進(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所示。

1627983956568_1.jpg

圖1 運(yùn)行結(jié)果

文件1中,當(dāng)在第4行再次對num賦值時(shí),程序出現(xiàn)了“The final local variable num cannot be assigned. It must be blank and not using a compound assignment(final變量num無法被重新賦值)”的錯(cuò)誤。由此可見,被final修飾的變量為常量,它只能被賦值一次,其值不可改變。

文件1中,演示的是局部變量被final修飾的情況,當(dāng)局部變量使用final關(guān)鍵字進(jìn)行修飾時(shí),可以在聲明變量的同時(shí)對變量進(jìn)行賦值,也可以先聲明變量然后再進(jìn)行有且只有一次的賦值。而當(dāng)成員變量被final修飾時(shí),在聲明變量的同時(shí)必須進(jìn)行初始化賦值,否則程序編譯報(bào)錯(cuò),接下來通過一個(gè)案例來演示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所示。

1627983962670_2.jpg

圖2 運(yùn)行結(jié)果

從圖2可以看出,程序出現(xiàn)了編譯錯(cuò)誤,并提示“The blank final field m may not have been initialized(final修飾的變量m沒有初始化)”。這是因?yàn)槭褂胒inal關(guān)鍵字修飾成員變量時(shí),Java虛擬機(jī)不會(huì)對其進(jìn)行初始化。因此使用final修飾成員變量時(shí),需要在定義變量的同時(shí)賦予一個(gè)初始值,下面將第3行代碼修改為:

final int m = 0; // 為final修飾的成員變量m初始化賦值

保存后,Eclipse的編輯器將不會(huì)提示錯(cuò)誤。







猜你喜歡:

final關(guān)鍵字的作用是什么?Java中的final用法

在數(shù)據(jù)處理中哪些場景可以使用Spark?

Java中final關(guān)鍵字如何使用?

黑馬程序員java開發(fā)培訓(xùn)

分享到:

Java培訓(xùn)班課程javaee

Python培訓(xùn)機(jī)構(gòu)python大數(shù)據(jù)

web前端培訓(xùn)課程升級V8.5web

AI+設(shè)計(jì)培訓(xùn)課程ui

大數(shù)據(jù)培訓(xùn)課程cloud

軟件測試培訓(xùn)課程test

c

新媒體運(yùn)營培訓(xùn)netmarket

產(chǎn)品經(jīng)理培訓(xùn)課程pm

linux培訓(xùn)Linux

movies

智能機(jī)器人培訓(xùn)robot

電商視覺設(shè)計(jì)課程uids

AI

集成電路應(yīng)用開發(fā)(嵌入式)培訓(xùn)課程jdbc

在線咨詢 我要報(bào)名
和我們在線交談!