結(jié)論:靜態(tài)方法只能調(diào)用靜態(tài)方法(或者變量),非靜態(tài)方法可以調(diào)用靜態(tài)方法(或者變量)
原因:
類的靜態(tài)成員(變量或方法)屬于類本身杆煞,在類加載的時(shí)候就會(huì)分配內(nèi)存谋逻,可以通過(guò)類名直接訪問(wèn)
非靜態(tài)成員(變量或方法)屬于類的對(duì)象塔插,只有在類的對(duì)象產(chǎn)生(實(shí)例化)時(shí)才會(huì)分配內(nèi)存,然后通過(guò)類的對(duì)象(實(shí)例)去訪問(wèn)
所以糯崎,如果一個(gè)類的靜態(tài)方法去調(diào)用非靜態(tài)方法或變量的時(shí)候几缭,因?yàn)轭惖撵o態(tài)方法存在的時(shí)候,類的非靜態(tài)成員可能不存在沃呢,訪問(wèn)一個(gè)內(nèi)存中不存在的東西當(dāng)然會(huì)出錯(cuò)
轉(zhuǎn)載
——————————————————————————————————
拓展問(wèn)題:為什么java中的聲明為static的main方法能調(diào)用非靜態(tài)方法或變量年栓?
原因:必須通過(guò)初始化(new)一個(gè)對(duì)象后,通過(guò)對(duì)象來(lái)調(diào)用薄霜,否則會(huì)報(bào)錯(cuò)某抓。
class A{
public static void main(String[]args){
A a = new A();
a.printHello();
}
void printHello(){
System.out.println("Hello");
}
}
//結(jié)果正常
class A{
public static void main(String[]args){
// A a = new A();
// a.printHello();
printHello();//報(bào)錯(cuò)
}
void printHello(){
System.out.println("Hello");
}
}