日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
鴻蒙HarmonyOS開(kāi)發(fā)Java并發(fā)-final關(guān)鍵字

想了解更多內(nèi)容,請(qǐng)?jiān)L問(wèn):

站在用戶(hù)的角度思考問(wèn)題,與客戶(hù)深入溝通,找到鳳凰網(wǎng)站設(shè)計(jì)與鳳凰網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶(hù)體驗(yàn)好的作品,建站類(lèi)型包括:成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名注冊(cè)、網(wǎng)頁(yè)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋鳳凰地區(qū)。

和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos./#zz

一、final使用場(chǎng)景

final可以稀釋變量,方法和類(lèi),用于便是修飾的內(nèi)容一旦賦值之后不會(huì)再被改變,比如string類(lèi)就是一個(gè)final類(lèi)型的類(lèi)。

二、final修飾變量

在Java中變量可以分為成員變量和局部變量。

成員變量

通常每個(gè)類(lèi)中成員變量可以分為類(lèi)變量(static修飾的變量)以及實(shí)例變量針對(duì)這兩種類(lèi)型的變量賦初始值的時(shí)機(jī)是不同的。

類(lèi)變量可以再聲明變量的時(shí)候直接賦初始值或者在靜態(tài)代碼塊中給類(lèi)變量賦初始值;而實(shí)例變量可以在聲明變量的時(shí)候給實(shí)例變量賦初始值,在非靜態(tài)初始化塊中以及構(gòu)造器中賦初始值。

類(lèi)變量有兩個(gè)時(shí)機(jī)賦初始值,而實(shí)例變量可以有三個(gè)時(shí)機(jī)賦初始值。當(dāng)final變量未初始化時(shí)系統(tǒng)不會(huì)進(jìn)行隱式初始化,會(huì)出現(xiàn)報(bào)錯(cuò)。

將這幾種情況歸納整理一下:

類(lèi)變量:必須要在靜態(tài)初始化塊中指定初始值或者聲明該類(lèi)變量時(shí)指定初始值,而且只能在這兩個(gè)地方之一警醒指定;

實(shí)例變量:必須要在非靜態(tài)初始化塊,聲明該實(shí)例變量或者在構(gòu)造器中指定初始值,而且只能在這三個(gè)地方警醒指定。

局部變量

final局部變量有程序員進(jìn)行顯示初始化,如果final局部變量已經(jīng)進(jìn)行了初始化則后面就不能再次進(jìn)行更改,如果final變量未進(jìn)行初始化,可以進(jìn)行賦值,當(dāng)且僅有一次賦值,一旦賦值之后再次賦值就會(huì)出錯(cuò)。

基本數(shù)據(jù)類(lèi)型和引用數(shù)據(jù)類(lèi)型

final修飾的基本數(shù)據(jù)類(lèi)型和引用類(lèi)型有區(qū)別嗎?

通過(guò)上面的例子我們已經(jīng)看出來(lái),如果final修飾的是一個(gè)基本數(shù)據(jù)類(lèi)型的數(shù)據(jù),一旦賦值后就不能再次更改,那么,如果final修飾的是引用數(shù)據(jù)類(lèi)型?這個(gè)引用的對(duì)象能夠改變嗎?

 
 
 
 
  1. package passtra; 
  2.  
  3. public class FinalExample{ 
  4.  
  5. //在聲明final實(shí)例成員變量時(shí)進(jìn)行賦值 
  6.  
  7. private final static Person person=new Person(25, 175); 
  8.  
  9. public static void main(String[] args) { 
  10.  
  11. //對(duì)final引用數(shù)據(jù)類(lèi)型person進(jìn)行更改 
  12.  
  13. person.age=22; 
  14.  
  15. System.err.println(person.toString()); 
  16.  
  17.  
  18. static class Person{ 
  19.  
  20. private int age; 
  21.  
  22. private int height; 
  23.  
  24. public Person(int age, int height) { 
  25.  
  26. super(); 
  27.  
  28. this.age = age; 
  29.  
  30. this.height = height; 
  31.  
  32.  
  33. @Override 
  34.  
  35. public String toString() { 
  36.  
  37. return "Person [age=" + age + ", height=" + height + "]"; 
  38.  
  39.  
  40.  

 當(dāng)我們對(duì)final修飾的應(yīng)用數(shù)據(jù)類(lèi)型變量person的屬性改成22,是可以操作成功的。

通過(guò)代碼可以看出,當(dāng)final修飾基本數(shù)據(jù)類(lèi)型時(shí),不能對(duì)基本數(shù)據(jù)類(lèi)型變量重新賦值,因此基本數(shù)據(jù)類(lèi)型不能被改變,而對(duì)于引用數(shù)據(jù)類(lèi)型,它僅僅保存的是一個(gè)引用,final只保證引用類(lèi)型所引用的地址不會(huì)發(fā)生改變,即一直引用這個(gè)對(duì)象,但這個(gè)對(duì)象屬性是可以改變的。

宏變量

利用final變量的不可更改性,在馬祖下面三個(gè)條件時(shí),該變量就會(huì)成為一個(gè)宏變量,即一個(gè)常量。

使用final修飾符修飾,在定義該final變量時(shí)就指定了初始值,該初始值在編譯時(shí)就能夠唯一指定。

注意

當(dāng)程序中其他地方使用該宏變量時(shí),編譯器會(huì)直接替換該變量的值。

三、final修飾方法

重寫(xiě)

當(dāng)父類(lèi)的方法被final修飾的時(shí)候,子類(lèi)不能重寫(xiě)父類(lèi)的該方法。你如在object中g(shù)etClass()方法就是說(shuō)final修飾的,我們就不能重寫(xiě)該方法,但是hasdhCode()不是被final修飾的,我們就可以重寫(xiě)hashCode()方法。

重載

 
 
 
 
  1. package passtra; 
  2.  
  3. public class FinalExample{ 
  4.  
  5. public final void test(){ 
  6.  
  7.  
  8. //沒(méi)有報(bào)錯(cuò) 
  9.  
  10. public final void test(int i){ 
  11.  
  12.  

 可以看出被final修飾的方法可以重載。

四、final修飾類(lèi)

當(dāng)一個(gè)類(lèi)被final修飾時(shí),表明該類(lèi)不能被子類(lèi)繼承。

子類(lèi)往往可以重寫(xiě)父類(lèi)的方法和屬性,會(huì)帶來(lái)一定的安全隱患,因此當(dāng)一個(gè)類(lèi)不希望被繼承是就可以用final修飾。

五、final在JDK中有哪些應(yīng)用

final經(jīng)常被用作不變類(lèi)上,利用final的不可更改性。

不變類(lèi)

不變類(lèi)的意思是創(chuàng)建該類(lèi)的實(shí)例后,該實(shí)例的實(shí)例變量時(shí)不可改變的。滿(mǎn)足以下條件可以成為不變類(lèi):

  • 使用private和final修飾該類(lèi)的成員變量;
  • 提供帶參數(shù)的構(gòu)造器用于初始化類(lèi)的成員變量;
  • 僅為該類(lèi)的成員變量提供getter方法,不提供setter方法,因?yàn)槠胀ǚ椒o(wú)法修改final修飾的成員變量;
  • 如果有必要就重寫(xiě)object的hashCode和equals方法應(yīng)該保證用equals判斷相同的兩個(gè)對(duì)象其HashCode值也是相等的。

JDK中提供的八個(gè)包裝類(lèi)和String類(lèi)都是不可變的,可以看看string的實(shí)現(xiàn)

private final char value[];

可以看出string的value就是final修飾的,上述其他幾條性質(zhì)也是吻合的。

想了解更多內(nèi)容,請(qǐng)?jiān)L問(wèn):

和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos./#zz

 【編輯推薦】

  1. 2020年值得推薦的六大服務(wù)器管理軟件和工具
  2. 2021-2025年數(shù)字經(jīng)濟(jì)九大技術(shù)趨勢(shì)展望
  3. 20 分鐘建立一個(gè) Ansible 實(shí)驗(yàn)室
  4. 聊聊通信界的“超級(jí)網(wǎng)紅”SRv6
  5. 2020年已如此糟糕,網(wǎng)絡(luò)安全的2021還會(huì)更差嗎?

當(dāng)前名稱(chēng):鴻蒙HarmonyOS開(kāi)發(fā)Java并發(fā)-final關(guān)鍵字
URL網(wǎng)址:http://m.5511xx.com/article/ccdjseh.html