static靜態(tài)的:可以用來修飾屬性、方法、代碼塊(或初始化塊)、內部類【不能用于構造器】
static修飾屬性(類變量):
通過對象也能調用類變量
1.由類創(chuàng)建的所有對象都共用一個屬性(類變量:變量前用static修飾的變量)(變量也可以叫屬性)
2.當其中一個對象對此屬性進行修改,會導致其他對象對此屬性的一個調用(就是所有的都發(fā)生變化)
3.類變量隨著類的加載而加載,而且獨一份
4.靜態(tài)的變量可以直接通過“類.類變量“進行調用
5.類變量的加載是要早于對象的,所以當有對象以后,可以“對象.類變量”使用。但是“類.實例變量”是不行的(類似父子關系,后出生的可以調用先出生的,先出生的不能調用后出生的)
6.類變量存在靜態(tài)域中,供次類的所有對象使用
實例變量(實例=對象,也可以叫【對象變量】):不用static修飾的屬性,每創(chuàng)建一個對象都會在堆內開辟一個空間,每個空間內都有不用static修飾的屬性,是獨立的,相當于副本,單個變量修改對其他變量不造成影響
實例變量是隨著對象的創(chuàng)建而創(chuàng)建。沒創(chuàng)建之前不分配內存空間
static修飾的方法(類方法):
1.隨著類的加載而加載,在內存中也是獨一份,一個對其改變會改變所有值
2.可以直接通過“類.類方法”的方式調用
3.方法內部可以調用靜態(tài)的屬性或方法(因為生命周期一樣).不能調用非靜態(tài)的屬性或方法
4.非靜態(tài)的方法是可以調用靜態(tài)的屬性或方法
注:靜態(tài)的結構(static修飾的屬性、方法、代碼塊、內部類)的生命周期要早于非靜態(tài)的的結構,同時回收也要晚于非靜態(tài)的結構
1.靜態(tài)的方法內是不可以有this和super關鍵字的,應為this代表當前對象,super也是引用當前對象父類的值,靜態(tài)的方法要早于對象
2.構造器和非靜態(tài)的方法一樣,可以調用靜態(tài)的屬性或方法
3.不依賴與具體對象的方法、屬性都可以用static
4.使用靜態(tài)變量可以實現(xiàn)“累加”的效果