第二十一節(jié)課:static

import static java.lang.Math.random;
// import  java.lang.Math;

class StaticModifier {

    /*
        類中的靜態(tài)變量和靜態(tài)方法能夠與“類名”一起使用,不需要創(chuàng)建一個類的對象來訪問該類的靜態(tài)成員.

    */
    static int i= 10;
    int j;

    StaticModifier() {
        j = 20;

    }

}
public class TestStatic {

    // 多個實例中的靜態(tài)變量 um 是共享同一內存空間,t1.um 和 t2.um 其實指向的都是同一個內存空間
    static UserModel um = new UserModel();
    //1.static 修飾符
    public static void main(String args[]) {
        // 類.static 變量
        StaticModifier.i = 20;
        System.out.println("類變量i=" + StaticModifier.i);

        // 對象.實體變量
        StaticModifier s = new StaticModifier();
        System.out.println("實例變量j=" + s.j);

        /*2.編譯器只為整個類創(chuàng)建了一個靜態(tài)變量的副本,因此它能夠用類名進行訪問。
        也就是說:一個類中,一個 static 變量只會有一個內存空間,雖然有多個類實例,
        但這些類實例中的這個 static 變量會共享同一個內存空間*/
        TestStatic t1 = new TestStatic();
        t1.um.userName = "張三";
        TestStatic t2 = new TestStatic();
        t2.um.userName = "李四";
        System.out.println("t1.um.userName=="+t1.um.userName);
        System.out.println("t2.um.userName=="+t2.um.userName);

        //3. static 方法可以用類名而不是引用來訪問
        System.out.println(GeneralFunction.addUp(1,2));

        // // 如訪問控制權限允許,static 屬性和方法可以使用對象名加‘.’方式調用;當然也
        // GeneralFunction a = new GeneralFunction();
        // a.addUp(3,4);

        // 4.靜態(tài)import
        System.out.printf("\n隨機數是:%f",random());

        /*5.靜態(tài)初始器(Static Initializer)是一個存在與類中方法外面的靜態(tài)塊。靜態(tài)初始器僅僅

        在類裝載的時候(第一次使用類的時候)執(zhí)行一次。

        靜態(tài)初始器的功能是:往往用來初始化靜態(tài)的類屬性。

        */

        System.out.println("counter=" + Count.counter);
        new Count().test();
    }
}

class UserModel{
    public String userName="";
}

class GeneralFunction {

    int temp;
    // static 的基本規(guī)則:有關靜態(tài)變量或方法的一些要點如下:

    public int getTemp(){

        return temp >0?temp:0;
    }

    // 構造方法不允許聲明為 static 的
    public   GeneralFunction(){


    }
    // static 方法可以用類名而不是引用來訪問
    public static int addUp(int x, int y) {
        /* 一個類的靜態(tài)方法只能訪問靜態(tài)屬性,否則出錯,
        并且靜態(tài)方法中不存在當前對象,因而不能使用“this”,當然也不能使用”super”;*/

        //temp = 10; 
        // 一個類的靜態(tài)方法不能夠直接調用非靜態(tài)方法,否則出錯
        // x = getTemp();
        return x + y;
    }
    
}

class GeneralFunctionSon  extends GeneralFunction{
    //  靜態(tài)方法不能被非靜態(tài)方法覆蓋;
    public static int addUp(int x, int y) {
    
        return x+y;
    }

}

class Count {

    public static int counter;
    static {//只運行一次
        counter = 123;
        System.out.println("Now in static block.");
    }
    public void test(){
        System.out.println("test method=="+counter);
    }
}

public class People{
    Dog d ;
    public static void main(String[] args) {
        People zhangSan = new People();
        zhangSan.d = new Dog();
        zhangSan.d.nikName = "gouDan";
        System.out.print(zhangSan.d.nikName);
    }

}
class Dog{

    int legs;
    String nikName;

}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容