亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

[轉] 再論 java 中的 final 變量

soasme / 1289人閱讀

摘要:的內存分配方式修飾變量通常情況下,變量有個地方可以賦值直接賦值,構造函數(shù)中,或是初始化塊中。如就是對于變量,在聲明時,如果你沒有賦值,系統(tǒng)默認這是一個空白域,在構造函數(shù)進行初始化,如果是靜態(tài)的,則可以在初始化塊。

【java中為什么會有final變量】:

final這個關鍵字的含義是“這是無法改變的”或者“終態(tài)的”;
那么為什么要阻止改變呢?
java語言的發(fā)明者可能由于兩個目的而阻止改變:
1).效率問題:
    jdk中的某些類的某些方法,是不允許被用戶覆蓋的,設計者可能認為,所用方法已經是最好的方法,
    用戶私自覆蓋,或是由于疏忽而覆蓋,就會影響JVM或是系統(tǒng)的系能;
2). 設計所需:
    眾所周知,有些情況必須使用final關鍵字,比如方法中的匿名內部類的參數(shù)傳遞;

【final關鍵字的使用方法】:

【修飾變量】:
    final成員變量表示常量,只能被賦值一次,賦值后值不再改變。
【修飾方法】:
    final方法不能被子類方法覆蓋,但可以被繼承。
【修飾類】:
    final類不能被繼承,沒有子類,final類中所有方法都是final的。

【final的內存分配方式】:

【修飾變量】:
    通常情況下,final變量有3個地方可以賦值:直接賦值,構造函數(shù)中,或是初始化塊中。
    【初始化】:
        由于在java的語法中,聲明和初始化是聯(lián)系在一起的,
        也就是說:如果你不顯示的初始化一個變量,系統(tǒng)會自動用一個默認值來對其進行初始化。(如int就是0)
        對于final變量,在聲明時,如果你沒有賦值,系統(tǒng)默認這是一個空白域,在構造函數(shù)進行初始化,
        如果是靜態(tài)的,則可以在初始化塊。
    【內存】:
         常量(final變量)和非final變量的處理方式是不一樣的。
         每一個類型在用到一個常量時,都會復制一份到自己的常量池中。
         常量也像類變量(static)一樣保存在方法區(qū),只不過他保存在常量池。
         (可能是,類變量被所有實例共享,而常量池是每個實例獨有的。)
【修飾方法】:
    保存在方法區(qū),并且可以被函數(shù)代碼直接替換,而不用等到執(zhí)行時再決定具體是那個函數(shù)。
【修飾類】:
    保存在方法區(qū)。

【java中變量的初始化順序】:

 變量的初始化次序優(yōu)于任何方法,甚至在構造方法的前面。對于static變量也是一樣,
 如果變量是原始類型,那么它得到一個標準的原始類型的初始值,
 如果是一個對象的引用,除非你創(chuàng)建了一個新的對象給這個引用,否則就是null。
 static變量在需要的時候才會初始化,并且在這個類的構造函數(shù)和所有其他普通變量之前調用,static之后就不再進行初始化了,
 static變量在類初始化時(注意不是實例),就必須分配內存空間,
 static變量多帶帶劃分一塊存儲空間。

 java類首次裝入時,會對靜態(tài)成員變量或方法進行一次初始化,
 先初始化父類的靜態(tài)代碼-->初始化子類的靜態(tài)代碼-->
 (創(chuàng)建使歷史,如果不創(chuàng)建實例,則后面的不執(zhí)行)初始化父類的非靜態(tài)代碼-->初始化父類的構造
     -->初始化子類的非靜態(tài)代碼-->初始化子類的構造

 類只有在使用new調用創(chuàng)建的時候才會被java類裝載器裝入。

【final方法為何會高效】:

final方法會在編譯的過程中利用內嵌機制進行inline優(yōu)化。
inline優(yōu)化是指:在編譯的時候直接調用函數(shù)代碼替換,而不是在運行時調用函數(shù)。
inline需要在編譯的時候就知道最后要用哪個函數(shù),    
顯然,非final是不行的。
非final方法可能在子類中被重寫,由于可能出現(xiàn)多態(tài)的情況,編譯器在編譯階段
并不能確定將來調用方法的對象的真正類型,也就無法確定到底調用哪個方法。

【什么是多態(tài)】:

按字面的意思是“多種狀態(tài)”。在面向對象語言中,接口的多種不同的實現(xiàn)方式即為多態(tài)。
簡單的說,就是一句話:允許將子類類型的指針賦值給父類類型的指針。

【非final方法為什么會出現(xiàn)多態(tài)】:

顯然,如果派生出一個子類,覆蓋非final方法,就會出現(xiàn)2個這樣的方法可供調用,這就是多態(tài)。

【final變量的變與不變】:

有人說final變量在賦值后就不可變,
那么這個不變到底指的是什么呢?
這個不變指的是引用,是地址,而所引用的對象的內容仍然是可變的。
就是說,這個final變量永遠指向某個對象,是一個常量指針,而不是指向常量的指針。

===========================================================================================

【final關鍵字的具體應用】:

【final+變量】:
    在實際應用中,這種形式是非常少見的。
    比如logger是可以的,但是貌似并不是非常實用,或許用戶仍然希望通過setter來改變logger變量。
【static+final+變量】:
    常量。經常使用。
【final+方法】:
    JDK中常用,但是自己并未常用。
【final+類】:
    helper類經常使用。
【final用于匿名內部類的參數(shù)傳遞】:
    在多線程測試時,經常使用。
【final用于方法的參數(shù)】:
    并不常用。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://www.ezyhdfw.cn/yun/65327.html

相關文章

  • Java 多態(tài)(8)

    摘要:在面向對象的程序設計語言中,多態(tài)是繼數(shù)據抽象和繼承之后的第三種基本特征。 在面向對象的程序設計語言中,多態(tài)是繼數(shù)據抽象和繼承之后的第三種基本特征。 1.再論向上轉型 多態(tài)作用:消除類型之間的耦合關系. 2.轉機 綁定:將一個方法調用同一個方法主體關聯(lián)起來. 前期綁定:在程序執(zhí)行前就進行綁定(面向過程語言默認綁定方式). 后期綁定:也叫動態(tài)綁定或運行時綁定,在運行時根據對象的類型進行綁...

    v1 評論0 收藏0
  • Java編程思想》筆記8.多態(tài)

    摘要:多態(tài)的作用是消除類型之間的耦合關系。編寫構造器準則用盡可能簡單的方法使對象進入正常狀態(tài),如果可以的話,避免調用其他方法。 點擊進入我的博客 在面向對象的程序設計語言中,多態(tài)是繼數(shù)據抽象(封裝)和繼承之后的第三種基本特征。多態(tài)通過分離做什么和怎么做,從另一角度將接口和實現(xiàn)分離開來。多態(tài)的作用是消除類型之間的耦合關系。 8.1 再論向上轉型 對象既可以作為它自己的本類使用,也可以作為它的...

    chinafgj 評論0 收藏0
  • 鳥瞰前端 , 再論性能優(yōu)化

    摘要:前端性能優(yōu)化的涉及點從服務器到協(xié)議再到宿主環(huán)境本身都要有比較深刻的認識,業(yè)界目前主要還是以雅虎總結出來條前端性能優(yōu)化的黃金軍規(guī)為參考。 歡迎大家前往騰訊云技術社區(qū),獲取更多騰訊海量技術實踐干貨哦~ 導語 : 從事前端有6年+的時間了,從最開始的美工到重構再到偏向js邏輯開發(fā)的前端開發(fā),一直在前端這個行業(yè)里面摸索和學習,我現(xiàn)在將自己這些年的一個心得體會來個系統(tǒng)性的梳理寫成一篇關于性能優(yōu)化...

    voidking 評論0 收藏0
  • | Java8初體驗(一)lambda表達式語法

    摘要:初體驗下面進入本文的正題表達式。接下來展示表達式和其好基友的配合。吐槽一下方法引用表面上看起來方法引用和構造器引用進一步簡化了表達式的書寫,但是個人覺得這方面沒有的下劃線語法更加通用。 感謝同事【天錦】的投稿。投稿請聯(lián)系 tengfei@ifeve.com 本文主要記錄自己學習Java8的歷程,方便大家一起探討和自己的備忘。因為本人也是剛剛開始學習Java8,所以文中肯定有錯誤和理解偏...

    Lucky_Boy 評論0 收藏0
  • [零基礎學python]編寫類之四再論繼承

    摘要:從運行結果可以看出,當子類繼承多個父類的時候,對于構造函數(shù),只有第一個能夠被繼承,第二個就等掉了。重點看,類繼承了,同時,在構造函數(shù)中自己做了規(guī)定,也就是的構造函數(shù)是按照的意愿執(zhí)行,不執(zhí)行的內容,但是,還有一個方法,則繼承了這個方法。 在上一講代碼的基礎上,做進一步修改,成為了如下程序,請看官研習這個程序: #!/usr/bin/env python #coding:utf-8 c...

    BoYang 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<