staticとconstとfinalのお話

先日「javaのstaticって何?」って質問をされた。

何って言われても普段何気なく使ってるものなので改めて聞かれると難しい。

「あのあれだよほら、値が一個しかないやつ」みたいなテキトーなことしか言えなかった。

それが何とも言えぬ悔しさだったので改めて勉強しましたよ!

オーノー!俺が一番嫌いな言葉は勉強なんだぜーッ!

折角なのでついでによく一緒に出てくるconstとかfinalもね!!!


まずstaticってのは日本語訳すると静的とかって言うよね、これは知ってた。

静的変数とかよく言うし。

じゃあ具体的に静的変数って何ぞや?って言うと

「値が一個しかない」になるんですよ。

具体例を書きます。

class Test {
  public int a;
  public static int b;

  public static void main(String[] args) {
    Test t1 = new Test();
    Test t2 = new Test();

    t1.a = 100;
    t1.b = 100;
    t2.a = 200;
    t2.b = 200;
    System.out.println(t1.a + ":" + t1.b);
    System.out.println(t2.a + ":" + t2.b);
  }
}

このプログラムを実行すると以下のようになると思います。

100:200
200:200

もうおわかりですよね?
t1.bの値が100ではなく200になっています。
static付のbは値が一つしかないのでどこかで変更すると全てが変わってしまいます。
個人的にstaticを使うときはstatic constで定数にしちゃうので
普通のstaticをどういうときに使うのか?って言われると
これっていう用途がすぐに思いつかないです。


さてstaticがだいぶ長くなりましたがconstとfinalはjavaでは一緒っぽいです。
一言で言うと「変更したらビルドでエラーにしてね」の意味です。
こっちはどえらい簡単ですね。
ちなみにjavaのconstとc言語のconstは少し違うのですがそれはまた別の機会に。