static(靜態)成員與非靜態變數(和普通成員方法)的關係
阿新 • • 發佈:2019-02-07
1.static ( 被其修飾的是靜態成員類成員,屬於整個類所有,不是針對某個物件即類中所有物件所有。
可以使用類名訪問,也可以使用物件名訪問 ) 使用之靜態變數 static可修飾變數、方法、程式碼塊
1)靜態成員(方法)能直接呼叫(訪問)靜態成員,不能直接呼叫非靜態成員(變數、方法),需要通過物件
訪問非靜態成員(變數、方法)
2)普通成員方法可以直接訪問同類中的靜態成員(變數、方法)&& 非靜態成員
3)類名訪問,只能訪問靜態變數,不能訪問非靜態成員
4)類方法不能使用this關鍵字 ,因為沒有this的例項 可供使用
2.static
1)沒有加static的成員、屬性、方法,稱例項成員、屬性、方法
2)加有static的成員、屬性、方法,稱類成員、屬性、方法
public class jingtaibianliang { static String className = "JAVA開發一班"; public static void main(String[] args) { //類名訪問(只能訪問靜態變數) System.out.println(jingtaibianliang.className); // System.out.println(jingtaibianliang.numName); 錯的(類名訪問,只能訪問靜態變數) //建立一個物件 jingtaibianliang class01 = new jingtaibianliang(); //物件名訪問 System.out.println(class01.className); //用該物件對className修改 class01.className = class01.className + "牛逼"; //類名訪問 System.out.println(jingtaibianliang.className); } }
執行結果:
JAVA開發一班
JAVA開發一班
JAVA開發一班牛逼
public class jingtaifangfa { String name1 = "nihao"; //非靜態變數 static String name2 = "你好"; //靜態變數 public static void main(String[] args) { //建立一個物件 jingtaifangfa work1 = new jingtaifangfa(); //直接訪問靜態變數 System.out.println(name2); //通過物件訪問同一個類的非靜態變數 System.out.println(work1.name1); //通過物件訪問靜態變數 System.out.println(work1.name2); //直接呼叫靜態方法 print(); //通過物件呼叫普通成員方法 work1.show(); //通過物件呼叫靜態方法 work1.print(); } //普通成員方法 public void show() { System.out.println("普通成員方法"); //普通成員方法直接訪問非靜態變數 System.out.println(name1); //普通成員方法直接訪問靜態變數 System.out.println(name2); } //靜態方法 public static void print(){ System.out.println("靜態方法"); } }
執行結果:
你好
nihao
你好
靜態方法
普通成員方法
nihao
你好
靜態方法