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/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,
且在文章頁面明顯位置給出原文鏈接,否則保留追究法律責任的權利。
|