這篇文章主要介紹“如何使用Java并發(fā)之inal關(guān)鍵字”,在日常操作中,相信很多人在如何使用Java并發(fā)之inal關(guān)鍵字問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對(duì)大家解答”如何使用Java并發(fā)之inal關(guān)鍵字”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!
南部網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)公司!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站開發(fā)等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營維護(hù)。成都創(chuàng)新互聯(lián)公司于2013年創(chuàng)立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)公司。
一、final使用場(chǎng)景
final可以稀釋變量,方法和類,用于便是修飾的內(nèi)容一旦賦值之后不會(huì)再被改變,比如string類就是一個(gè)final類型的類。
二、final修飾變量
在Java中變量可以分為成員變量和局部變量。
成員變量
通常每個(gè)類中成員變量可以分為類變量(static修飾的變量)以及實(shí)例變量針對(duì)這兩種類型的變量賦初始值的時(shí)機(jī)是不同的。
類變量可以再聲明變量的時(shí)候直接賦初始值或者在靜態(tài)代碼塊中給類變量賦初始值;而實(shí)例變量可以在聲明變量的時(shí)候給實(shí)例變量賦初始值,在非靜態(tài)初始化塊中以及構(gòu)造器中賦初始值。
類變量有兩個(gè)時(shí)機(jī)賦初始值,而實(shí)例變量可以有三個(gè)時(shí)機(jī)賦初始值。當(dāng)final變量未初始化時(shí)系統(tǒng)不會(huì)進(jìn)行隱式初始化,會(huì)出現(xiàn)報(bào)錯(cuò)。
將這幾種情況歸納整理一下:
類變量:必須要在靜態(tà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ù)類型和引用數(shù)據(jù)類型
final修飾的基本數(shù)據(jù)類型和引用類型有區(qū)別嗎?
通過上面的例子我們已經(jīng)看出來,如果final修飾的是一個(gè)基本數(shù)據(jù)類型的數(shù)據(jù),一旦賦值后就不能再次更改,那么,如果final修飾的是引用數(shù)據(jù)類型?這個(gè)引用的對(duì)象能夠改變嗎?
package passtra; public class FinalExample{ //在聲明final實(shí)例成員變量時(shí)進(jìn)行賦值 private final static Person person=new Person(25, 175); public static void main(String[] args) { //對(duì)final引用數(shù)據(jù)類型person進(jìn)行更改 person.age=22; System.err.println(person.toString()); } static class Person{ private int age; private int height; public Person(int age, int height) { super(); this.age = age; this.height = height; } @Override public String toString() { return "Person [age=" + age + ", height=" + height + "]"; } } }
當(dāng)我們對(duì)final修飾的應(yīng)用數(shù)據(jù)類型變量person的屬性改成22,是可以操作成功的。
通過代碼可以看出,當(dāng)final修飾基本數(shù)據(jù)類型時(shí),不能對(duì)基本數(shù)據(jù)類型變量重新賦值,因此基本數(shù)據(jù)類型不能被改變,而對(duì)于引用數(shù)據(jù)類型,它僅僅保存的是一個(gè)引用,final只保證引用類型所引用的地址不會(huì)發(fā)生改變,即一直引用這個(gè)對(duì)象,但這個(gè)對(duì)象屬性是可以改變的。
宏變量
利用final變量的不可更改性,在馬祖下面三個(gè)條件時(shí),該變量就會(huì)成為一個(gè)宏變量,即一個(gè)常量。
使用final修飾符修飾,在定義該final變量時(shí)就指定了初始值,該初始值在編譯時(shí)就能夠唯一指定。
注意:
當(dāng)程序中其他地方使用該宏變量時(shí),編譯器會(huì)直接替換該變量的值。
三、final修飾方法
重寫
當(dāng)父類的方法被final修飾的時(shí)候,子類不能重寫父類的該方法。你如在object中g(shù)etClass()方法就是說final修飾的,我們就不能重寫該方法,但是hasdhCode()不是被final修飾的,我們就可以重寫hashCode()方法。
重載
package passtra; public class FinalExample{ public final void test(){ } //沒有報(bào)錯(cuò) public final void test(int i){ } }
可以看出被final修飾的方法可以重載。
四、final修飾類
當(dāng)一個(gè)類被final修飾時(shí),表明該類不能被子類繼承。
子類往往可以重寫父類的方法和屬性,會(huì)帶來一定的安全隱患,因此當(dāng)一個(gè)類不希望被繼承是就可以用final修飾。
五、final在JDK中有哪些應(yīng)用
final經(jīng)常被用作不變類上,利用final的不可更改性。
不變類
不變類的意思是創(chuàng)建該類的實(shí)例后,該實(shí)例的實(shí)例變量時(shí)不可改變的。滿足以下條件可以成為不變類:
使用private和final修飾該類的成員變量;
提供帶參數(shù)的構(gòu)造器用于初始化類的成員變量;
僅為該類的成員變量提供getter方法,不提供setter方法,因?yàn)槠胀ǚ椒o法修改final修飾的成員變量;
如果有必要就重寫object的hashCode和equals方法應(yīng)該保證用equals判斷相同的兩個(gè)對(duì)象其HashCode值也是相等的。
JDK中提供的八個(gè)包裝類和String類都是不可變的,可以看看string的實(shí)現(xiàn)
private final char value[];
可以看出string的value就是final修飾的,上述其他幾條性質(zhì)也是吻合的。
到此,關(guān)于“如何使用Java并發(fā)之inal關(guān)鍵字”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!
新聞名稱:如何使用Java并發(fā)之inal關(guān)鍵字
本文地址:http://jinyejixie.com/article14/gpsdge.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、網(wǎng)站策劃、網(wǎng)站維護(hù)、定制開發(fā)、自適應(yīng)網(wǎng)站、云服務(wù)器
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)