我相信在剛學 Java 的初學者常常會搞不清楚 static 的用途,有時候程式執行結果不對,就隨便加看看,就算過了也不知道為什麼,其實不要說初學者,連老手有時候都會一時搞不清楚的! 畢竟每個程式語言的 static 多少有些微不太一樣。而這次主要介紹的是 Java 的觀念。
我將 static 分為三種大概念並且用以下程式碼來解說:
一. static 變數在 class 中,你會發現以上程式碼的第 24 行印出的結果竟然會是 10!由此可見在 class 中的 static 變數無論該 class 被 new 出幾次,這個 static 的變數是共用的,因為它只佔據了唯一的記憶體空間。
我將 static 分為三種大概念並且用以下程式碼來解說:
- class Test {
- public static int mValue = 0;
- public Test() {}
- public static void printValue() {
- static int value = 100;
- System.out.println( value );
- value += 100;
- }
- }
- public class Main {
- public static void main(String[] argv) {
- Test test1 = new Test();
- System.out.println(test1.mValue);
- Test test2 = new Test();
- test2.mValue = 10;
- System.out.println(test2.mValue);
- System.out.println(test1.mValue);
- }
- }
一. static 變數在 class 中,你會發現以上程式碼的第 24 行印出的結果竟然會是 10!由此可見在 class 中的 static 變數無論該 class 被 new 出幾次,這個 static 的變數是共用的,因為它只佔據了唯一的記憶體空間。
二. static 的變數或 function 是可以透過 class 直接被存取的,假如我們要直接改 Test 中的 mValue ,可以直接用 Test.mValue = 5; 的方式,直接改變 iValue 的值,而同理,若我們要呼叫 Test 中的 printValue(),可以直接用 Test.printValue(); 的方式,如此便可執行該 function 了。
三. 在 function 中的 static 變數會保留上次執行此 function 後,該變數最後的值,因此假如多呼叫幾次 printValue() 就會發現它印出的值每次都會加 100。
以上便是三個主要的 static 用法,我們常會看到有些 open source 的東西會把 function 宣告成 static,其實主要目的就是那個 function 常被用到,而如果每次要用到都需要 new 出一個物件,實在很浪費資源,因此只要把它宣告成 static 就可以直接呼叫了。 至於要怎麼樣活用 static 就要靠經驗的累積了!
沒有留言:
張貼留言