java中为final变量赋值的几种方式
java中為final變量賦值的幾種方式
前言
使用final修飾變量,很多人第一時(shí)間想到的就是不可變。然后以為變量必須得在聲明的時(shí)候就為其賦初始值,其實(shí)不然,本文將詳細(xì)講解java中使用final修改的變量的賦值問題。
被final修飾的變量的幾種賦值方式
1、被final修飾的變量有三種賦值方式。
2、被final static修飾的變量有兩種賦值方式。
儲(chǔ)備知識(shí):在類的加載中,類的加載順序我們應(yīng)該都知道,靜態(tài)代碼塊->構(gòu)造代碼塊->構(gòu)造方法
精華:
當(dāng)類被加載進(jìn)內(nèi)存的時(shí)候,這個(gè)屬性只是聲明了一個(gè)變量,并沒有給分配內(nèi)存空間,只有當(dāng)類在被實(shí)例化的時(shí)候才分配了內(nèi)存空間,而這個(gè)時(shí)候又同時(shí)執(zhí)行了構(gòu)造方法, 所以屬性被初始化了,也就符合了當(dāng)它被分配內(nèi)存空間的時(shí)候就需要實(shí)例化,以后不在改變的條件。
被final修飾的變量
1、在定義時(shí)直接賦值
public class Test {public final String str = "mark"; }2、聲明時(shí)不賦值,在構(gòu)造方法中進(jìn)行賦值
public class Test {public final String str;public Test() {this.str = "mark";} }3、聲明時(shí)不賦值,在構(gòu)造代碼塊中進(jìn)行賦值
public class Test {public final String str;{this.str = "mark";} }當(dāng)你發(fā)現(xiàn)一個(gè)類的變量被final修飾但沒被賦值,那么可以判斷出它肯定會(huì)在構(gòu)造函數(shù)里被賦值。(因?yàn)樘热羰莝et方法賦值,線程是不安全的,因?yàn)閟et方法可以被調(diào)用多次,而final變量只能被賦值一次)
被final static修飾的變量
1、在定義時(shí)直接賦值
public class Test {public static final String str = "mark";}2、在靜態(tài)代碼塊里面進(jìn)行賦值
public class Test {public static final String str;static {str = "mark";} }final變量會(huì)經(jīng)過jvm進(jìn)行優(yōu)化,所以平時(shí)使用過程中建議使用final來修飾變量。
總結(jié)
以上是生活随笔為你收集整理的java中为final变量赋值的几种方式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第三届Apache Flink比赛榜单
- 下一篇: 阿里云供应链大赛-榜单