您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關怎么進行static的分析,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
static 總結
static Fields
static Methods
static member class
static initializer
--------------------------------------------------------------------------------
static 成員調用方式:
static 是一個修飾符, 用于修飾成員(成員變量, 成員函數和成員類/接口)
當成員被 static 修飾后, 就多了一個調用方式.
除了可以被對象調用外, 還可以直接被類名調用.
調用格式: 類名.靜態成員
1) 無論是否 new 對象, 都可采用的調用方式: 類名.靜態成員 (建議采用)
2) 必須在 new 對象之后, 才可采用的調用方式: 對象.靜態成員 (不建議采用, 閱讀性不好)
--------------------------------------------------------------------------------
static 成員特點:
> 隨著類的加載而加載, 隨著類的消失而消失
也就是說, 靜態成員的生命周期最長(等同于類的生命周期)
> 優先于對象而存在
靜態成員是先存在的, 而對象是后存在的
> 被所有對象所共享
> 可以直接被類名調用
--------------------------------------------------------------------------------
實例變量和類變量區別:
1. 存儲位置
類變量隨著類的加載而存儲于方法區中
實例變量隨著對象的創建而存儲于堆內存中
2. 生命周期
類變量生命周期最長, 隨著類的加載而加載, 消失而消失
實例變量生命周期隨著對象的創建而創建, 消失而消失
3. 調用方式
實例變量只能通過對象調用
類變量既可以通過對象調用, 也可以通過類名調用.
--------------------------------------------------------------------------------
何時使用 static?
當成員變量的值被類的所有對象所共享時, 用 static 修飾, 即定義為類變量
對象中特有的數據定義為實例變量, 存在于堆內存中
當成員函數不操作任何成員變量或只操作 static 成員變量時, 用 static 修飾
成員類/接口呢??? static member class 呢?
--------------------------------------------------------------------------------
static 使用注意事項
> 靜態只能訪問靜態
非靜態可以訪問靜態也可以訪問非靜態
> 靜態中不可以使用 this, super 關鍵字
因為靜態優先于對象存在, 所以靜態中不能使用 this, super 關鍵字
> 主函數是靜態的
--------------------------------------------------------------------------------
static 利與弊
好處:
對所有對象的共享數據進行單獨空間的存儲, 節省空間. 沒必要每個對象都存儲一份.
可以直接被類名調用
弊端:
生命周期過長
訪問出現局限性(靜態雖好, 只能訪問靜態)
--------------------------------------------------------------------------------
主函數 main 的定義
public static void main(String[] args) {}
主函數是一個特殊的函數. 作為程序的入口, 可以被 JVM 調用.
主函數必須是固定格式的, 才能被 JVM 識別.
主函數定義的特點:
public: 代表著該函數的訪問權限是跨包的
static: 代表著主函數隨著類的加載而加載
不需要創建對象, 直接用主函數所屬類名即可調用.
命令行窗口輸入 java StaticDemo 時, 實際上就是在執行 Static.main(String[])
void: 主函數沒有具體的返回值
main: 不是關鍵字, 但是是一個特殊的單詞, 可以被 JVM 識別.
(String[] args): 主函數的參數列表. 參數類型是一個字符串類型的數組.
主函數 main 也具備一般函數的特點, 可以重載.
但是 JVM 只調用形參列表為 String[] 的 main 函數.
主函數 main 的形參名字可以更改, 仍然可以被 JVM 識別.
如何通過 main 函數給 JVM 傳遞參數
--------------------------------------------------------------------------------
static 的應用 - 工具類
每一個應用程序中都有共性的功能. 可以將這些功能進行抽取, 獨立封裝, 以便復用.
--------------------------------------------------------------------------------
靜態代碼塊
聲明格式:
static {
執行語句;
}
特點:
隨著類的加載而執行 // new 對象或引用類的靜態成員時可觸發類的加載
類是否加載, 可通過添加 static 代碼塊驗證
只執行一次 // 因類只加載一次
優先于主函數執行 // 因執行主函數之前需先加載主函數所在的類
只能訪問類的靜態成員, 不能訪問非靜態成員
作用:
用于給類進行初始化
--------------------------------------------------------------------------------
何時可觸發類加載?
new 對象或引用類的靜態成員時可觸發類的加載
只創建類類型的引用變量時不會觸發類的加載
主函數所屬類的static代碼塊優先于主函數執行
--------------------------------------------------------------------------------
static 代碼塊, 構造代碼塊和構造函數比較
(1) static代碼塊: 用于類初始化. 隨類加載執行且只執行一次.
(2) 構造代碼塊: 用于所有對象初始化. new一個對象執行一次。
(3) 構造函數: 對應對象初始化. 若new該構造函數對應的對象則該構造函數執行一次.
(4) 訪問限制:
static 代碼塊只能訪問 static 成員;
構造代碼塊能調用 static 和非 static 成員, 但不能調用構造函數;
構造函數可以調用 static, 非 static 和其他構造函數.
(5) 執行順序:static 代碼塊->構造代碼塊->對應構造函數
類加載時, 做類的初始化動作, 執行且只執行一次 static 代碼塊;
new 對象時, 若類未加載則先加載類, 若已加載則做對象的初始化動作, 依次執行構造代碼塊, 對應構造函數.
ps:new 對象不一定會加載類, 因類可能早已加載.
上述就是小編為大家分享的怎么進行static的分析了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。