以Instance來說,Class只是一個模型,在new的時候複製一份至每個物件的記憶體空間中,因此每個物件中的元素互相不共用
而Static則是將元素限定於Class本身的記憶體,new的時候是將元素本身的參照存至物件記憶體中,而非複製,此外也能直接透過Class本身去存取該元素
Instance範例
public class test { public static void main(String args[]) { Foo bar; // 產生一個名為bar的Foo空物件 bar = new Foo(); // 將Foo複製到物件bar bar.setFoobar(35); // 設定bar物件中的foobar變數 bar.getFoobar(); // 回傳bar物件中的foobar變數 } } class Foo { private int foobar; void setFoobar(int foobar) { this.foobar = foobar; // 設定當前物件(this)的foobar變數 } int getFoobar() { return this.foobar; // 回傳當前物件(this)的foobar變數 } }
對Instance來說Class只是一個模型,所以this是指當前物件,在new給物件之前,這並沒有指向任何東西
Static範例
public class test { public static void main(String args[]) { // 透過物件存取,不建議這樣使用 Foo bar; // 建立名為bar的Foo物件 bar = new Foo(); // 將Foo複製到物件bar bar.setFoobar(40); // 透過物件bar設定foobar變數 bar.getFoobar(); // 透過物件bar取回foobar變數 // 直接存取 Foo.setFoobar(35); // 透過Class本身的方法去設定foobar變數 Foo.getFoobar(); // 透過Class本身的方法回傳foobar變數 } } class Foo { private static int foobar; static void setFoobar(int foobar) { Foo.foobar = foobar; // 將Class的foobar設為傳入變數foobar } static int getFoobar() { return Foo.foobar; // 回傳Class的foobar變數 } }
留言