靜態與非靜態的變數和方法
阿新 • • 發佈:2019-02-04
靜態方法:屬於類本身。
非靜態方法:屬於類生成的每個物件。
如果一個方法與依賴於類的個別特徵,應該保持靜態。否則應該定義為非靜態。
public class MethodDemo { public static void main(String[] args) { ClassA c = new ClassA(10); System.out.println(c.noStaticMethod()); ClassA.staticMethod(); // c.staticMethod(); // 也能呼叫不過會引發歧義,有可能會誤認為這個方法屬於物件 } } class ClassA { private int i; public ClassA(int i) { this.i = i; } public static void staticMethod2() { System.out.println("staticMethod2"); } public static void staticMethod() { staticMethod2();// 靜態方法可呼叫靜態方法 // this.noStaticMethod();靜態方法不能呼叫非靜態方法 System.out.println("staticMethod"); } public int noStaticMethod() { ClassA.staticMethod();// 非靜態方法可呼叫靜態方法 return i + 1; } }
靜態變數與非靜態變數定義類似。
public class Var_Demo { public static void main(String[] args) { System.out.println(Person.eyeNum);// 0 Person p = new Person(); p.name = "jack"; // p.eyeNum = 2;物件也可訪問類變數 Person.eyeNum = 2; Person p2 = new Person(); System.out.println(p.eyeNum + " " + p2.eyeNum); } } class Person { String name; static int eyeNum;// 靜態變數系統預設賦初值 }
成員變數與區域性變數同名時
public class Var_Demo2 {
private static int a = 100;
public static void main(String[] args) {
int a = 50;
System.out.println(a);
System.out.println(Var_Demo2.a);
// 區域性變數與成員變數同名,成員變數會被覆蓋(引用型別也一樣)
}
}
變數使用規則
- 描述某個類中的固有資訊,使用成員變數。若這個屬性為物件共有的相同屬性這定義為靜態變數。不相同的值則使用例項變數
- 儲存該類或例項執行的狀態資訊使用成員變數
- 某個資訊需要在某個類的多個方法中共享,使用成員變數