【いまさらネタ】static(静的)について理解してみた

Apexは基本javaと同じなので、staticの考えは一緒です。
仕事で利用しているにも関わらず、
書かれているコードに対して、なぜつける必要があるんだっけ?
とか、説明ができなかったりと、、

見慣れているはずなのに、あれ?これってなんだっけ?
てなって、あー理解してなかったな、、と改めて感じました。

ということで、以下サイトを参考に勉強しました。
【Java】 staticって何? | 一番かんたんなJava入門

ふむふむ、なるほど。

インスタンスに属するか、クラスに属するか、という事だったのか。
後者がstaticなメンバとなる。

実際にapexで書いてみよう。

humanクラス

public class human {

    public static integer human_cnt = 0;

    public string name;
    
    public human(String name) {
        human_cnt += 1;
        this.name = name;
    }

    public static void testcall() {
        system.debug('human_cnt:' + human_cnt);
    }
}

実行するApexコード

// インスタンス作成
human h1 = new human('太郎');
human h2 = new human('次郎');
human h3 = new human('三郎');

// h1インスタンスの名前
system.debug(h1.name);

// humanの件数
system.debug(human.human_cnt);

// human(静的)メソッドの呼び出し
human.testcall();

実行結果

f:id:MNakayama:20160225154506j:plain

humanクラスを用意して、h1,h2,h3のインスタンスを作成、
nameメンバはそれぞれのインスタンスに属している。
(h1.name は 太郎、といった感じ)

human_cntメンバはクラスが持っているので、
human.human_cntのような感じで呼び出せる。
メソッドの呼び出しも同様。

この場合、h1.human_cnt や human.name などは属している
領域が違うのでコンパイルエラーになる。

もやもやがとれて頭がすっきりしました。
日々精進。ほんならね~