天天看點

javaSE07基礎-static 關鍵字

static 關鍵字

static被稱為靜态,可以用來修飾類的屬性,方法,代碼塊,内部類.

  • 修飾的成員,被所有對象所共享
  • 不建立對象,直接被調用
  • 優先于對象存在靜态優先于非靜态
  • 類加載時執行

1.可直接通過類名通路 也可以通過對象名通路

static      

如過不是靜态,每一個對象都要複制一份變量,浪費空間,

當所有對象的某一個值都相同時,加一個static使其為靜态,在記憶體中隻有一份,所有對象共享

  • 靜态方法隻能通路 靜态的變量
  • 成員方法可以方法可以通路 成員變量 還可以方法靜态變量
package com.nie.day2.Demo1;

public class StaticTest {
    String name;
    int age;
    static String school;//可直接通過類名通路 也可以通過對象名通路
    //static
    //修飾的成員,被所有對象所共享
    //不建立對象,直接被調用
    //優先于對象存在o
    //随着加載而加載

    public void work() {
        System.out.println(name + "\t" + age + "\t" + school);
    }
}      
package com.nie.day2.Demo1;

public class Test1 {
    public static void main(String[] args) {
        StaticTest.school = "陝西";//可直接通過類名通路 
        StaticTest b = new StaticTest();
        b.age = 12;
        b.name = "sfdsf";
        b.work();

        StaticTest c = new StaticTest();
        c.age = 33;
        c.name = "花花";
        c.work();
    }
}      

輸出:

sfdsf 12  陝西
花花  33  陝西      

代碼塊

  • 靜态變量優先于于非靜态,
  • 類加載時自動調用,僅一次,與是否建立對象無關。
package com.nie.day2.Demo1;

public class Demo {
    static int num = 10;

    {
        System.out.println("執行個體代碼塊");
    }

    static {
        System.out.println("靜态代碼塊");
    }

    public static void main(String[] args) {
        new Demo();// 先加載類 然後建立對象
        new Demo();

        System.out.println(Demo.num);

    }
}      
靜态代碼塊
執行個體代碼塊
執行個體代碼塊
10