static修飾符與final修飾符


1、final修飾符: 修飾類,方法,屬性,局部變量


  • 當修飾方法時,被final修飾的方法稱為最終方法,不能重寫
  • 當修飾類時,被final修飾的類是最終類,不能被繼承,例如: String
  • 被final和static修飾的變量(此時稱之為常量)的名字要大寫

2、static修飾符


2.1修飾的對象:

  • 類中的成員(屬性[靜態變量或類變量]和方法[靜態方法或類方法])
  • 靜態屬性的特點:
    • 靜態變量被所有對象共享
    • 隨着類的加載而加載,隨着類的消失而消失,和對象的創建無關
    • 可以直接被類名調用
  • 方法的特點:
    • 靜態方法優先於對象存在,在靜態方法中無法訪問與對象相關的實例變量(這時候對象還沒有創建,其屬性也就沒有)
    • 靜態方法無法訪問實例變量
    • 靜態方法可以訪問靜態變量
    • 實例方法可以訪問靜態變量
    • 靜態方法無法訪問實例方法
    • 靜態方法只能訪問靜態方法或靜態變量,無法訪問非靜態
    • 實例方法可以訪問靜態(屬性和方法)和非靜態(屬性和方法)
    • 靜態方法無法訪問this,super(this,super是屬於對象的)
    • 使用子類可以訪問父類中的靜態方法和靜態變量

2.2靜態變量與實例變量的區別:

  • 所屬區域不同
    • 靜態變量: 靜態變量屬於類
    • 實例變量: 實例變量屬於對象
  • 調用的方式不同
    • 靜態變量: 可以被類名調用,也可以使用對象調用
    • 實例變量: 只能被對象調用
  • 存儲的位置不同
    • 靜態變量: 存儲在方法區
    • 實例變量: 存儲在堆中
  • 加載順序不同
    • 靜態變量: 隨着類的加載而加載,隨着類的消失而消失,和對象的創建無關
    • 實例變量: 隨着對象的創建而創建,隨着對象的銷毀而銷毀
  • 如何使用靜態方法和實例方法:
    • 如果方法中不需要訪問類中的屬性(實例變量),那么就可以把方法定義為靜態的,方便使用
    • 如果方法中需要訪問類中的屬性(實例變量),那么就必須方法定義為非靜態的
  • 靜態代碼塊:
    • 語法:

      

    • 當類第一次被加載到內存時,會在最后調用靜態代碼塊且只調用一次
  • 構造代碼塊
    • 語法:

      

    • 構造代碼塊創建對象的時候調用,在構造代碼塊寫一些構造器中的共性,會在構造器中最先調用構造代碼塊,后執行自定義初始化
        • 創建對象時做的事情:
        • 先看類是否加載,如果類是第一次使用會加載類
        • 接着加載類中的靜態成員
        • 調用靜態代碼塊
        • new:
          • 在內存中為對象分配空間
          • 確定對象的首地址
          • 為實例變量進行默認初始化
          • 如果有顯示初始化,在進行顯示初始化
          • 調用構造器
          • 調用父類的空參構造器super()
          • 調用構造代碼塊
          • 執行自定義初始化

 


閱罷此文,如果您覺得本文不錯並有所收獲,請【打賞】或【推薦】,

也可【評論】留下您的問題或建議與我交流。 
你的支持是我不斷創作和分享的不竭動力!

 

 

 

 

作者:寒冰雪
出處:https://home.cnblogs.com/u/snow1234/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,
且在文章頁面明顯位置給出原文鏈接,否則保留追究法律責任的權利。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM