java筆記之final和static關(guān)鍵字

      網(wǎng)友投稿 894 2025-03-31

      前言


      類的加載順序?yàn)椋?/p>

      (1)初始化變量。對于靜態(tài)變量肯定要首先進(jìn)行初始化,因?yàn)楹竺娴姆椒赡軙褂眠@個(gè)變量,或者構(gòu)造函數(shù)中也可能用到。而對于非靜態(tài)變量而言,由于匿名塊內(nèi)、非靜態(tài)方法和構(gòu)造函數(shù)都可以進(jìn)行操作(不僅僅是初始化),所以要提前進(jìn)行加載和賦默認(rèn)值。

      (2)初始化靜態(tài)代碼塊,多個(gè)靜態(tài)代碼塊按順序加載,這里需要注意:在這個(gè)順序是類內(nèi)書寫的順序,也是類加載的順序.由于靜態(tài)代碼塊可能會負(fù)責(zé)變量的初始化,或者是對象等的初始化,這樣在構(gòu)造函數(shù)或者方法中就變得可用了。

      (3)匿名代碼塊,這個(gè)要后初始化于靜態(tài)代碼塊,因?yàn)槠湟廊粚儆趯?shí)例對象,而不屬于類。在這里可以對非靜態(tài)成員變量進(jìn)行初始化工作。

      (4)構(gòu)造函數(shù) 這里需要解釋一下,為什么初始化子類必先初始化父類,由于子類可能會繼承父類的屬性或方法,所以肯定要先初始化父類了,而初始化父類則必須要調(diào)用父類的構(gòu)造函數(shù)。

      至于方法不用考慮,因?yàn)榉椒ú挥贸跏蓟?

      1.final

      1)修飾類 該類不能被繼承(在實(shí)際開發(fā)過程中盡量少使用final修飾類,因?yàn)橄到y(tǒng)要具備可擴(kuò)展性和可維護(hù)性)

      2)使用final修飾方法,方法不能被重寫

      3)final 修飾屬性:被final修飾的屬性必須初始化,初始化之后值不能改變(屬性為簡單類型時(shí)是值不變;屬性為引用類型時(shí)是地址不變,其指向的對象的屬性可以改變)

      4)final修飾變量:

      修飾方法的形參,該參數(shù)只能讀不能寫

      修飾局部變量,一般在內(nèi)部類使用(可以先定義,再賦值一次)

      5)final定義常量:

      public static final 類型 變量名 =值

      2.static關(guān)鍵字

      1)static 修飾屬性

      被static修飾的屬性,是屬于類級別的屬性。他被該類所產(chǎn)生的對象所共有

      1))靜態(tài)屬性的訪問方式

      類的外部:類名。屬性名

      類的內(nèi)部:屬性名即可,等價(jià)于類名。屬性名

      注:靜態(tài)屬性可以被非靜態(tài)的方法和靜態(tài)的方法中直接訪問

      2)static修飾方法:

      被static修飾的方法,是屬于類級別的方法。他是該類所產(chǎn)生的所有的對象所共享的方法

      1))靜態(tài)方法的訪問方式:

      類名。方法名(參數(shù)),適用于類的內(nèi)部和類的外部

      方法名(參數(shù)),適用于類的內(nèi)部

      注:

      a.靜態(tài)方法調(diào)用屬性,只能直接調(diào)用靜態(tài)屬性,非靜態(tài)的屬性只能通過對象引用才能調(diào)用

      b.靜態(tài)方法調(diào)用方法,只能直接調(diào)用靜態(tài)方法,非靜態(tài)的方法只能通過對象引用才能調(diào)用

      c.在靜態(tài)方法中,不能使用this,super調(diào)用屬性和方法(構(gòu)造器不能使用static修飾);原因是靜態(tài)的方法先于非靜態(tài)的屬性和非靜態(tài)的方法加載;具體參考下面的代碼分析。

      d.非靜態(tài)的方法可直接調(diào)用講臺的方法和靜態(tài)的屬性

      3)static靜態(tài)塊:

      在類體中:

      static {

      代碼

      }

      注:static塊只能在類體中定義,不能在方法中定義

      1))執(zhí)行方式:

      static 塊是在類加載時(shí),該語句就會被執(zhí)行;且此語句只能被執(zhí)行一次(因?yàn)椋侯惒捎玫膽屑虞d的方式,也就是說,如果內(nèi)存中的方法區(qū)已存在該類的代碼,那么就不會加載第二次;如果內(nèi)存中不存在代碼就會被加載,同時(shí)靜態(tài)塊也會被執(zhí)行)

      注:java命令找到帶有mian方法的類,通過類加載器該類加載到方法區(qū)

      靜態(tài)域:存放靜態(tài)屬性、靜態(tài)方法和靜態(tài)塊。

      2))應(yīng)用場景:

      加載配置文件,也可使用于只需加載一次的資源(如:讀取文件,加載數(shù)據(jù)庫驅(qū)動(dòng))

      3))static修飾類(內(nèi)部類)

      語法:

      static class 類名{

      類體

      }

      java筆記之final和static關(guān)鍵字

      1))特性:

      1)))在靜態(tài)內(nèi)部類中訪問外部類的成員,該成員必須是static的;可以使用外部類的對象引用來訪問外部類的非靜態(tài)成員

      2)))靜態(tài)內(nèi)部類的實(shí)例化方式:

      外部類類名。內(nèi)部類類名 變量名 =new 外部類類名。內(nèi)部類類名(參數(shù)列表);

      3)))靜態(tài)內(nèi)部類可被四大訪問控制修飾符所修飾

      4)))靜態(tài)內(nèi)部類可直接調(diào)用外部類的靜態(tài)方法;也可以使用外部了引用來調(diào)用非靜態(tài)的方法

      5)))外部類訪問靜態(tài)內(nèi)部類的靜態(tài)方法:

      外部類類名。方法名

      外部類訪問內(nèi)部類的FAI靜態(tài)方法:內(nèi)部類引用。方法名;

      4)代碼示例分析:

      Joo.run(參數(shù)類表);

      分析:

      1))檢查Joo是否存在代碼區(qū)

      2))若存在代碼區(qū),就不加載Joo代碼。若不存在,就將Joo的代碼加載到方法區(qū)中。

      將被static修飾的屬性、方法和靜態(tài)塊放置到靜態(tài)域中,將普通方法放置在普通方法區(qū)中。

      3))當(dāng)Joo的代碼加載完畢之后,立即執(zhí)行static塊;

      4))通過Joo的地址在靜態(tài)域中找到run方法,并且執(zhí)行run方法。

      Joo J=new Joo(參數(shù)類表);

      1))檢查J00在代碼區(qū)是否存在

      2))若存在,就直接在堆區(qū)中開辟空間,并將非靜態(tài)的屬性以及非靜態(tài)的方法引用存在堆區(qū)中。

      3))在棧區(qū)開辟空間,記錄堆區(qū)對象地址。

      Joo.print(參數(shù)類表);

      1))通過棧區(qū)引用的地址,找到堆區(qū)中的方法的地址,然后再在方法區(qū)找到方法,并執(zhí)行。

      總結(jié)

      創(chuàng)建一個(gè)不可變類(不可變類是指當(dāng)創(chuàng)建了這個(gè)類的實(shí)例后,就不允許修改它的屬性值)需要如下條件:

      1. 對于一般成員都是private,還可以使用public static final 來定義一個(gè)全局的常量。

      2. 不提供對成員的修改方法,例如:setXXX()

      3. 確保所有的方法不會被重載。手段有兩種:使用final Class(強(qiáng)不可變類),或者將所有的類方法加上final關(guān)鍵字(弱不可變類)。

      4. 如果某一個(gè)類成員不是原始變量(primitive)或者不可變類,必須通過在成員初始化或者get方法時(shí)通過深度clone方法,來確保類的不可變。

      Java

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:WPS中段落首行怎么正確縮進(jìn)兩個(gè)字符?
      下一篇:【W(wǎng)eb前端】hexo+GitPages搭建博客
      相關(guān)文章
      久久亚洲成a人片| 亚洲国产婷婷香蕉久久久久久| 国产美女亚洲精品久久久综合| 亚洲国产精品成人午夜在线观看| 亚洲综合色区中文字幕| 亚洲成aⅴ人片在线观| 亚洲精品视频免费看| 久久久久亚洲AV无码观看| 亚洲视频在线观看免费视频| 亚洲高清无在码在线电影不卡 | 色播亚洲视频在线观看| 亚洲AV成人片色在线观看| 亚洲精品国产成人99久久| 久久精品国产亚洲AV麻豆网站 | 亚洲AV日韩AV一区二区三曲| 久久久久亚洲国产AV麻豆| 亚洲AV无码一区二区一二区| 国产精品亚洲va在线观看| 亚洲裸男gv网站| 亚洲乱码中文字幕久久孕妇黑人| 国产亚洲精品资源在线26u| 亚洲高清国产AV拍精品青青草原| 亚洲AV永久精品爱情岛论坛| 久久久久亚洲AV成人无码| 内射少妇36P亚洲区| 亚洲区视频在线观看| 色噜噜亚洲男人的天堂| 亚洲色大成网站www永久网站| 亚洲国产精品无码中文lv | 亚洲视频精品在线| 亚洲成av人片在线看片| 亚洲综合色丁香婷婷六月图片 | 国产亚洲精品AAAA片APP| 亚洲精品高清一二区久久| 亚洲一区AV无码少妇电影☆| 亚洲AV日韩AV高潮无码专区| 精品亚洲麻豆1区2区3区| 99热亚洲色精品国产88| 亚洲Av永久无码精品一区二区| 亚洲成?v人片天堂网无码| 亚洲色大成网站WWW久久九九|