類成員,被類所擁有,每個類在程序運行周期內只會加載一次,也就是說一個內存中只存在一個
,他被所有實例共享
static 成員可在它任何對象創建之前進行訪問,無需引用任何對象
public static String name;
實例成員 在創建對象時所擁有,每次new就會創建一個實例,實例成員為實例所擁有,每個使用都有一個
public String address;
Student.name ? 靜態訪問方式,類名。屬性名
共享同一個name ?但每個都有自己的address
// 類方法-》調用方式與類成員一樣
public static void test() {
System.out.println("static");
}
// 實例方法-》調用方式與實例成員一致
public void test(String name) {
System.out.println("non-static");
}
stu.name=>Student.name
如果使用實例來訪問類變量/類方法,在底層會轉變成使用類名來訪問
靜態屬性和靜態方法能被繼承,但是沒有被重寫(overwrite)而是被隱藏.?因為重寫是實現多態的,同一個父類變量指向不同子類實例
只有實例方法能實現多態,類方法不能實現多態
按照Java加載順序??static 先加載類, 然后進行靜態變量初始化??,再創建對象
靜態方法只能訪問靜態屬性
靜態方法中不能有 this 丶 super 關鍵字(沒有創建對象)