成員變量:它是對(duì)象的屬性,存放在堆中與對(duì)象共存亡粗梭。調(diào)用時(shí)直接對(duì)象.屬性拼坎。
靜態(tài)變量:它存放在靜態(tài)方法區(qū)中與類共存亡浮毯,只能創(chuàng)建一個(gè),調(diào)用時(shí)可以對(duì)象.屬性也可以類.屬性泰鸡。
有人想問,為什么要搞static這個(gè)東東壳鹤?當(dāng)你的一個(gè)屬性相同時(shí)盛龄,你給他賦值一次,便可以重復(fù)調(diào)用芳誓。他就在那里不離不棄等你調(diào)用余舶。
靜態(tài)方法:它又有什么作用呢?你調(diào)用方法時(shí)得創(chuàng)建對(duì)象吧锹淌,通過對(duì)象調(diào)用方法匿值,而用static修飾的方法可以直接用類名調(diào)用,因?yàn)閟tatic與類相關(guān)赂摆。
靜態(tài)方法不能訪問成員變量挟憔,因?yàn)殪o態(tài)方法與類相關(guān),類加載時(shí)烟号,對(duì)象不一定創(chuàng)建绊谭,所以在靜態(tài)方法中不能出現(xiàn)this ,super汪拥。
成員方法可以訪問靜態(tài)方法达传,因?yàn)閷?duì)象創(chuàng)建時(shí),類已經(jīng)加載了。
1宪赶,靜態(tài)變量演示:
class Student {
int age;
static String country;
public static void sleep() {
System.out.println("學(xué)生睡覺");
}
}
class Demo3 {
public static void main(String[] args) {
Student s = new Student();
Student s1=new Student();
Student s2=new Student();
System.out.println(s.age = 10);
Student.sleep();
s.country="中國(guó)";
System.out.println(s.country);
System.out.println(s1.country);
System.out.println(s2.country);
}
}
代碼快:
靜態(tài)代碼塊:與類相關(guān)宗弯,只運(yùn)行一次,在類加載的時(shí)候運(yùn)行搂妻,它可以初始化靜態(tài)變量罕伯,之前你還得創(chuàng)建一個(gè)對(duì)象來調(diào)用它,還得用this給它初始化叽讳,好麻煩的用一個(gè)靜態(tài)變量追他。
構(gòu)造代碼快:與對(duì)象相關(guān),對(duì)象創(chuàng)建幾次那么他就運(yùn)行幾次岛蚤。
局部代碼塊:在方法中的代碼塊邑狸。控制方法的生命周期涤妒。
class Student {
int age;
static String country;
{
System.out.println("學(xué)生需要學(xué)習(xí)");
}
static {
country = "中國(guó)";
System.out.println("......學(xué)生需要學(xué)習(xí)");
}
}
class Demo3 {
public static void main(String[] args) {
Student s = new Student();
Student s1 = new Student();
Student s2 = new Student();
System.out.println(Student.country);
}
}
學(xué)了這么多東西单雾,它們?cè)趦?nèi)存中運(yùn)行的順序是什么?
類的加載--->靜態(tài)變量初始化--->靜態(tài)代碼---->創(chuàng)建對(duì)象--->成員變量初始化--->構(gòu)造代碼塊--->構(gòu)造方法她紫。