java之static、static final、final的區(qū)別與應(yīng)用

static

static可修飾屬性、方法、內(nèi)部類、代碼段
static強(qiáng)調(diào)的是只有一份,且可改變,但是在原有的地址空間上進(jìn)行改變。
如:
static修飾屬性

public class Test {
    //當(dāng)加載類時(shí)就會(huì)優(yōu)先初始化t變量,所以是在運(yùn)行期前初始化空間。
    //在此之后使用Test.t = "test2"這樣的語句,可以修改成功。
    private static String t = "test";
}

static修飾方法:

public class Test {
    // 可以通過Test.main()來進(jìn)行調(diào)用。也是在加載字節(jié)碼時(shí)初始化。
    public static void main(String[] args) {
        ...
    }
}

static修飾的內(nèi)部類:

public class Test {
    //  修飾靜態(tài)內(nèi)部類(ps內(nèi)部類分為:成員內(nèi)部類、局部?jī)?nèi)部類、靜態(tài)內(nèi)部類、匿名內(nèi)部類)
    static class StaticInnerClass {
    }

static修飾的代碼片段:

public class Test {
    // 修飾靜態(tài)方法
    static void fun() {
    }

jvm內(nèi)存主要分為

  • stack segment
  • heap segment
  • code segment
  • data segment
    static作為類共享的修飾符,可以被類中任何地方調(diào)用訪問。static修飾的變量存放在code segment。而一般的變量存在實(shí)例中,實(shí)例存在于heap segment,變量的引用存放在stack segment中。

final

  • final修飾的類不能被繼承
  • final修飾的方法,無法被子類重寫
  • final修飾的變量,無法修改值,final String a;,因?yàn)樵诔跏蓟瘯r(shí)沒有賦值,之后a變量不能再賦值修改。

static final

static final和final static沒什么區(qū)別,一般static寫在前面。

  • 常量,在加載時(shí)不依賴類,即在常量是在加載類之前加載的,加載常量后,才加載類,所有的常量會(huì)維護(hù)在常量池中。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容