static修飾符的作用


1.Static用來修飾 一個方法又或者一個成員變量,那么靜態方法和普通方法,靜態變量和成員變量之間又有什么區別呢?

 靜態方法和普通方法調用方式的不同

   如果是兩個靜態方法,可以直接調用

   如果是兩個普通方法,可以直接調用

   普通方法可以調用靜態方法

   靜態方法卻只能訪問靜態成員

   普通方法 可以 對象.方法

   靜態方法 則是 類.方法

  

  為什么被staic修飾的方法只能訪問靜態成員?

  因為靜態方法在類加載的時候就隨着一起加載了,此時其他成員和方法並沒有初始化,換個理解 static 屬於類,而普通成員和方法屬於對象,對象不一定相同,因此static方法里不能用 super和this

  靜態變量和成員變量的區別

  生命周期

      靜態變量隨類的加載而加載,隨類的銷毀而銷毀

      成員變量隨對象的加載而加載,隨對象的銷毀而銷毀

  調用方式不同

      一個是類調用,一個是對象調用

  存儲的位置不同

      靜態變量存儲在靜態區,而成員變量保存在堆里

2.Static還可以修飾代碼塊

  static{

   代碼..

  }

  靜態代碼塊隨類的加載而加載,而且類存在期間只加載一次

3.Static用來修飾內部類

  

  Static 修飾的內部了不需要先實例一個外部類,可以直接使用外部類.內部類

4.Static可以用來靜態導包

  import static XXX.XXX.XXX.靜態方法名  表示導入某個靜態方法

  或者import static import static XXX.XXX.XXX.* 表示導入當前類的靜態方法

  好處就是可以直接使用方法名,而不需要類.方法

 

 ----------------------------------------補充----------------------------------------------------------

關於static修飾符修飾的 方法 內部類 成員變量 代碼塊的加載順序

  一定是按順序加載,先加載父類,在加載子類

 

public abstract class Animal {
    static{
        System.out.println("父類的靜態代碼塊");
    }
    
}

 

public class Test extends Animal{
    private static int s = run();
    static{
        System.out.println("子類的靜態代碼塊");
    }
    static class A{
        static {
            System.out.println("子類的靜態內部類的靜態代碼塊");
        }
    }

     void sleep(){
         System.out.println("子類重寫父類的方法");
     }
     static void eat(){
        System.out.println("靜態的吃");
     }
     static int run(){
        System.out.println("靜態的跑");
        eat();
        return 0;
     }
    public static void main(String[] args){
        new A();
    }
}

執行結果

按順序加載,先加載父類,在加載子類

 

  

 


免責聲明!

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



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