談一談對static關鍵字的理解?

靜態方法和靜態變量

static關鍵字最基本的用法如下:

  1. static修飾的變量屬於類變量,可以直接通過類名.變量名來進行引用,不需要new出來一個類
  2. static修飾的方法屬於類方法,可以直接通過類名.方法名來進行引用,不需要new出來一個類

被static修飾的變量和方法屬於類的靜態資源,從JVM的類加載機制來說,靜態資源是在類初始化的時候加載的,而非靜態資源是類new的時候加載的,類的初始化早於類的new,基於此我們可以區分以下三個常見問題

  1. 靜態方法能不能引用非靜態資源?不能
  2. 靜態方法能不能引用靜態資源?能
  3. 非靜態方法能不能引用靜態資源?能
public class StaticTest {
    public static int total=15;

    public static void say(){
        System.out.println(total);
    }
    
    public void print(){
        say();
        System.out.println(total);
    }
}

靜態塊

靜態代碼塊也是static的重要應用之一,和靜態遍歷和方法一樣,靜態代碼快裏面的代碼只執行一次,而且在類的初始化的時候執行的

  1. 靜態資源的加載順序是嚴格按照靜態資源的定義順序來加載的
  2. 靜態代碼塊對於定義在它之後的靜態變量,可以賦值,但是不能訪問
  3. 靜態代碼塊是嚴格按照父類靜態代碼塊->子類靜態代碼塊的順序加載的,且只加載一次

static修飾類

這個用得相對比前面的用法少多了,static一般情況下來說是不可以修飾類的,如果static要修飾一個類,說明這個類是一個靜態內部類(注意static只能修飾一個內部類),也就是匿名內部類。

 

參考:https://www.cnblogs.com/xrq730/p/4820992.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章