一.與靜態(tài)方法的比較
一般情況下,如果有些代碼必須在項(xiàng)目啟動(dòng)的時(shí)候就執(zhí)行的時(shí)候,需要使用靜態(tài)代碼塊,這種代碼是主動(dòng)執(zhí)行的;需要在項(xiàng)目啟動(dòng)的時(shí)候就初始化,在不創(chuàng)建對(duì)象的情況下,其他程序來調(diào)用的時(shí)候,需要使用靜態(tài)方法,靜態(tài)方法在類加載的時(shí)候 就已經(jīng)加載 可以用類名直接調(diào)用 比如main方法就必須是靜態(tài)的 這是程序入口。兩者的區(qū)別就是:靜態(tài)代碼塊是自動(dòng)執(zhí)行的; 靜態(tài)方法是被調(diào)用的時(shí)候才執(zhí)行的。
二.靜態(tài)方法注意事項(xiàng)
使用類的靜態(tài)方法時(shí),注意:
a.在靜態(tài)方法里只能直接調(diào)用同類中其他的靜態(tài)成員(包括變量和方法),而不能直接訪問類中的非靜態(tài)成員。這是因?yàn)椋瑢?duì)于非靜態(tài)的方法和變量,需要先創(chuàng)建類的實(shí)例對(duì)象后才可使用,而靜態(tài)方法在使用前
不用創(chuàng)建任何對(duì)象。
b.靜態(tài)方法不能以任何方式引用this和super關(guān)鍵字,因?yàn)殪o態(tài)方法在使用前不用創(chuàng)建任何實(shí)例對(duì)象,當(dāng)靜態(tài)方法調(diào)用時(shí),this所引用的對(duì)象根本沒有產(chǎn)生(this關(guān)鍵字只能在方法內(nèi)部使用,表示對(duì)“調(diào)用方法的那
個(gè)對(duì)象”的引用)。
靜態(tài)變量是屬于整個(gè)類的變量而不是屬于某個(gè)對(duì)象的。注意不能把任何方法體內(nèi)的變量聲明為靜態(tài),例如: fun() { static int i=0;//非法。 }
三.程序舉例
其中讓我疑惑的是“a在父類帶參構(gòu)造方法中的值:10”,我再想那時(shí)候?yàn)槭裁床皇?,debug了(F11,不能直接設(shè)置斷點(diǎn)然后運(yùn)行,那樣和直接運(yùn)行沒區(qū)別),發(fā)現(xiàn)先進(jìn)入了無參的構(gòu)造方法,執(zhí)行了第一條語句并且切換到了另一個(gè)構(gòu)造方法(不管是不是反正第一句都要執(zhí)行,此時(shí)a還是10,非靜態(tài)代碼塊還未執(zhí)行),提示找不到源,不管是不是這條語句都提示了這個(gè)警告(不算錯(cuò)誤,因?yàn)槌绦蚶^續(xù)正常運(yùn)行),然后運(yùn)行了非靜態(tài)代碼塊,繼而從有參的構(gòu)造方法處繼續(xù)執(zhí)行……
新聞熱點(diǎn)
疑難解答
圖片精選