static

2019-06-27 14:01 更新

static

非靜態(tài)的可以訪問靜態(tài)的;
靜態(tài)的不能訪問非靜態(tài)的。
靜態(tài)的和類相關(guān);
非靜態(tài)和對象相關(guān)。

1.訪問靜態(tài)成員:

類名.靜態(tài)成員;
對象名.靜態(tài)成員;

2.關(guān)于帶static代碼執(zhí)行順序:

1 加載類:
    1.1 先將所有的靜態(tài)屬性做默認(rèn)初始化。
    1.2 根據(jù)設(shè)置的值做顯式的初始化。
    1.3 調(diào)用靜態(tài)代碼塊。
    注意:系統(tǒng)調(diào)用StaticTest的main方法時(shí)必須先加載StaticTest類,
        而不是在main方法中StaticTest d才加載StaticTest類。
2 創(chuàng)建對象時(shí):
    2.1 對所有的實(shí)例屬性做默認(rèn)的初始化。
    2.2 根據(jù)設(shè)置的值做顯式的初始化。
    2.3 調(diào)用構(gòu)造代碼塊。
    2.4 調(diào)用構(gòu)造方法(如果有父類,先調(diào)用super())
3 系統(tǒng)在堆內(nèi)存中給對象分配空間,確定對象的首地址。

3.小練習(xí): 其中(1(1.1))代表第1次執(zhí)行了1.1步驟。

public  class StaticTest {
    public static int i = 0;//(1(1.1))、(5(1.2))
    public static StaticTest s1 = new StaticTest("s1");//(2(1.1))、(6(1.2))
    public static int j = StaticTest.print("i");//(3(1.1))、(12(1.2))
    public static int k = 233;//(4(1.1))、(14(1.2))
    public int x = 10;//(7(2.1))、(8(2.2))、(16(2.1))、(17(2.2))
//  靜態(tài)代碼塊:(15(1.3))
    static {
//      會著類的加載而調(diào)用,只會調(diào)用一次,某些程序中初始化的工作
        System.out.println("調(diào)用了靜態(tài)代碼塊。");
    }
//  構(gòu)造代碼塊:(9(2.3))、(18(2.3))
    {
//      當(dāng)創(chuàng)建對象的時(shí)候會被調(diào)用,而且會被調(diào)用很多次,取決于創(chuàng)建了幾個(gè)對象;
//      會在構(gòu)造器之前調(diào)用.
        System.out.println("調(diào)用了構(gòu)造代碼塊。");
    }
//  構(gòu)造方法:(10(2.4))、(19(2.4))
    public StaticTest(String string) {
        System.out.println("調(diào)用了構(gòu)造方法。");
        StaticTest.print(string);
    }
//  靜態(tài)方法(11)、(13)、(20)
    public static int print(String s) {
        System.out.println("---------------");
        System.out.println("調(diào)用了靜態(tài)方法。");
//      局部代碼塊
        {
//          會產(chǎn)生一個(gè)局部作用域
            int i = 233;
            System.out.println("調(diào)用了局部代碼塊。");
        }
        System.out.println(s);
        System.out.println("***************");
        return 666;
    }
    public static void main(String[] args) {
        StaticTest d = new StaticTest("S");
    }
}

4.輸出結(jié)果:

調(diào)用了構(gòu)造代碼塊。
調(diào)用了構(gòu)造方法。
---------------
調(diào)用了靜態(tài)方法。
調(diào)用了局部代碼塊。
s1
***************
---------------
調(diào)用了靜態(tài)方法。
調(diào)用了局部代碼塊。
i
***************
調(diào)用了靜態(tài)代碼塊。
調(diào)用了構(gòu)造代碼塊。
調(diào)用了構(gòu)造方法。
---------------
調(diào)用了靜態(tài)方法。
調(diào)用了局部代碼塊。
S
***************
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號