在java中,靜態變數指的是被static修飾的類別的變數;靜態變數被所有類別實例物件所共享,在記憶體中只有一個副本,當且僅當在類別初次載入時會被初始化。
本教學操作環境:windows7系統、java8版、DELL G3電腦。
被static修飾的類別的變量,也稱為靜態變數。 非靜態變數也稱為實例變數
靜態變數和實例變數的差異是:
public class MyStatic { // 静态变量 private static int index = 0; // 实例变量 private int count = 0; public void inc() { index++; count++; } public String get() { return "静态变量index = " + index + ", 实例变量count = " + count; } }
/** * index是静态变量 * count是实例变量 * */ public class StaticVariableTest { public static void main(String[] args) { MyStatic myStatic1 = new MyStatic(); MyStatic myStatic2 = new MyStatic(); MyStatic myStatic3 = new MyStatic(); myStatic1.inc(); System.out.println("myStatic1的index、count增加1:"); System.out.println("myStatic1的" + myStatic1.get()); System.out.println("myStatic2的" + myStatic2.get()); System.out.println("myStatic3的" + myStatic3.get() + "\n"); myStatic2.inc(); System.out.println("myStatic2的index、count增加1:"); System.out.println("myStatic1的" + myStatic1.get()); System.out.println("myStatic2的" + myStatic2.get()); System.out.println("myStatic3的" + myStatic3.get() + "\n"); myStatic3.inc(); System.out.println("myStatic3的index、count增加1:"); System.out.println("myStatic1的" + myStatic1.get()); System.out.println("myStatic2的" + myStatic2.get()); System.out.println("myStatic3的" + myStatic3.get()); } }
運行結果:
可以看出:
myStatic1的index、count增加1: myStatic1的静态变量index = 1, 实例变量count = 1 myStatic2的静态变量index = 1, 实例变量count = 0 myStatic3的静态变量index = 1, 实例变量count = 0 myStatic2的index、count增加1: myStatic1的静态变量index = 2, 实例变量count = 1 myStatic2的静态变量index = 2, 实例变量count = 1 myStatic3的静态变量index = 2, 实例变量count = 0 myStatic3的index、count增加1: myStatic1的静态变量index = 3, 实例变量count = 1 myStatic2的静态变量index = 3, 实例变量count = 1 myStatic3的静态变量index = 3, 实例变量count = 1
靜態變數雖然獨立於對象,但是不代表不可以透過物件實例去訪問,所有的靜態方法和靜態變數都可以透過物件實例存取(只要存取權限足夠)。
this表示目前物件實例,而static靜態變數被所有物件所共享,所以可以透過this存取靜態變數
public class StaticVariable { public static int index = 1; public static void main(String[] args) { StaticVariable staticVariable = new StaticVariable(); staticVariable.get(); } private void get() { int index = 2; System.out.println(this.index); } }
運行結果:
Java中的static關鍵字不會影響到變數或方法的作用域。在Java中能夠影響到存取權限的只有private、public、protected(包括包存取權)這幾個關鍵字
public class MyStatic { public static int index1 = 1; // 静态变量 private static int index2 = 0; } public class StaticVariableTest { public static void main(String[] args) { System.out.println(MyStatic.index1); System.out.println(MyStatic.index2); } }
相關影片教學推薦: Java影片教學
以上是java靜態變數是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!