- 最後登錄
- 2024-11-11
- 在線時間
- 141 小時
- 註冊時間
- 2017-12-25
- 閱讀權限
- 20
- 精華
- 0
- UID
- 17787565
- 帖子
- 174
- 積分
- 181 點
- 潛水值
- 7450 米
| 首先,static 關鍵字的意義,Java 跟 C 很不一樣,所以你在 Java 裡面看見 static 的時候,先把 C 學到的東西忘掉吧。
Java 裡面有類別 Class 跟物件 Object 的概念,前幾天剛好有寫到:如果還不很清楚類別跟物件的差別,可以去想像紅龜粿的製作過程。class 就是那個模版,把麵糰塞進去敲一下就是一個物件(Object, 有時候叫實體 instance) 出來。
簡單來說 static 的變數跟著類別,非 static 的變數跟著物件。用上面的例子,static 的變數就是刻在模版上面- class Foobar {
- public static String sName = "Foobar";
- public static String mName = "blah";
- }
- System.out.println(Foobar.sName); // "Foobar", 即使沒有產生任何 instance 也能直接拿這個類別的變數來用
- Foobar a = new Foobar();
- Foobar b = new Foobar();
- a.mName = "A";
- b.mName = "B"; System.out.println(a.sName); // "Foobar"
- System.out.println(b.sName); // Foobar
- System.out.println(a.mName); // "A"
- System.out.println(b.mName); // "B"
- a.sName = "AAA";
- System.out.println(a.sName); // "AAA"
- System.out.println(b.sName); // "AAA"
複製代碼 public / private 用來修飾存取的權限,跟 static 與否是分開的概念。先把 static 的觀念釐清之後,對物件系統或類別繼承會比較清楚,這時候回頭看 public/protected/private 就會瞬間秒懂了。
「加 static 的差別在哪」大致上可以這麼回答:你如果覺得某個變數是某個類別,以及它所衍生出來的物件都要共有的,就把它加上 static 掛在類別上面。如果你覺得是每個衍生出來的徒子徒孫(物件)要分開區別的,就不要加上 static。
java 中的四種就是 public/protected/private/不寫用預設值,可以 google "Controlling Access to Members of a Class"
最後,在 inner/nested class 的情況下,才需要把它宣告成 static class。這已經是一個滿細微的議題了,我建議現在不要花時間理解這個 XD,我可以先說結論滿足好奇心:static class 的作用,跟一個獨立檔案的 class 檔是等價的,只是它寫的位置比較特別,寫在另外一個 class 檔案裡面而已。... |
|