static關(guān)鍵詞
static方法就是沒有this的方法。在static方法內(nèi)部不能調(diào)用非靜態(tài)方法罢艾,反過來是可以的。而且可以在沒有創(chuàng)建任何對(duì)象的前提下,僅僅通過類本身來調(diào)用static方法巡蘸。這實(shí)際上正是static方法的主要用途
static方法
????????static方法一般稱作靜態(tài)方法,由于靜態(tài)方法不依賴于任何對(duì)象就可以進(jìn)行訪問擂送,因此對(duì)于靜態(tài)方法來說悦荒,是沒有this的,因?yàn)樗灰栏接谌魏螌?duì)象团甲,既然都沒有對(duì)象逾冬,就談不上this了。并且由于這個(gè)特性,在靜態(tài)方法中不能訪問類的非靜態(tài)成員變量和非靜態(tài)成員方法身腻,因?yàn)榉庆o態(tài)成員方法/變量都是必須依賴具體的對(duì)象才能夠被調(diào)用产还。
? ? ? ? ? ?但是要注意的是,雖然在靜態(tài)方法中不能訪問非靜態(tài)成員方法和非靜態(tài)成員變量嘀趟,但是在非靜態(tài)成員方法中是可以訪問靜態(tài)成員方法/變量的
????????方法是獨(dú)立于對(duì)象存在的脐区,可以直接用過類名調(diào)用? ?(當(dāng)調(diào)用靜態(tài)方法時(shí),里面的非靜態(tài)成員變量或者方法可能都沒有被new出來? 為空 所以會(huì)報(bào)錯(cuò))
static變量
static變量也稱作靜態(tài)變量她按,靜態(tài)變量和非靜態(tài)變量的區(qū)別是:靜態(tài)變量被一個(gè)類的所有對(duì)象所共享牛隅,在內(nèi)存中只有一個(gè)副本,它當(dāng)且僅當(dāng)在類初次加載時(shí)會(huì)被初始化酌泰。而非靜態(tài)變量是對(duì)象所擁有的媒佣,在創(chuàng)建對(duì)象的時(shí)候被初始化,存在多個(gè)副本陵刹,各個(gè)對(duì)象擁有的副本互不影響默伍。
static成員變量的初始化順序按照定義的順序進(jìn)行初始化。
static代碼塊
static塊可以置于類中的任何地方衰琐,類中可以有多個(gè)static塊也糊。在類初次被加載的時(shí)候,會(huì)按照static塊的順序來執(zhí)行每個(gè)static塊(從上到下依次執(zhí)行)羡宙,并且只會(huì)執(zhí)行一次狸剃。
private?static?Date startDate,endDate;????
static{? ? ? ?
????startDate = Date.valueOf("1946");????????
????endDate = Date.valueOf("1964");????
}? ? ??
static塊可以用來優(yōu)化程序性能,是因?yàn)樗奶匦?只會(huì)在類加載的時(shí)候執(zhí)行一次
用法:
public class A{
? ? public static final String? a="1";
?? public static final String?? b="2";
}
public class B{
? ? ?public?static?void?main(String[] args) {? ? ? ??
?????System.out.println(A.a);
? ? }
}