wataruの部屋

20代駆け出しシステムエンジニア 低学歴な人生を歩んで来たため仕事させてくれる社会に感謝しています。 ブログの内容は映画やプログラミングに関することなど...

<Java>private static finalな定数って何なの? staticにする意味あるんすか....

f:id:koko55120:20190330113116j:plain

こんにちは!
Javaのクラスのみで使う定数でアクセス修飾子で"private static final"ってやつ
見ますよね。
そもそもこのアクセス修飾子の本質的な意味を考えていませんでしたが、
staticにする意味あるのか...とか思ったのでいろいろ調べてみました。

class test {

private static final String = "HOHE_HOGE_HOGE”;

}


初めに結論から言うとprvate static final修飾子は

そのクラスでしかアクセスできない、かつクラスに1つである定数であり
staticにすることでメモリを抑えるというメリットがある。
インスタンスを複数生成することを前提とするクラスには効果があり


そもそも、private修飾子はそのクラス内でしかアクセスできません。
※サブクラスからもアクセスはできない。


次にstatic修飾子というのは、クラスに対して静的である。(意味不明)
簡単に言うとインスタンスをいくつ生成しようがそのクラスに1つしか存在しない
ことを担保する修飾子です。
アクセス修飾子については以下の記事で書いてあります。
wataru55120.hatenablog.jp


本題です。
privateでfinalというのはそのクラスでしかアクセスできない定数であるということ。

class test {

private  final String = "HOHE_HOGE_HOGE”;

}

とすれば、宣言したクラスでしかアクセスできない"HOHE_HOGE_HOGE"という初期値に変更が無いことを
担保していますよね。

つまりこの定数にアクセスするには、このクラス自体がstaticでない限り
インスタンス化をする必要があります。

しかし、インスタンス化するということは、定数がstaticである必要がないのでは...
と思いますよね。

調べた結果

static変数とインスタンス変数の違いは
クラスに対して1つであるか。インスタンスに1つであるという違いです。

クラスで複数のインスタンスを生成する場合は、それぞれ使い分ける
必要がありそこに意味があります。

定数をstaticにすれば、インスタンスごとではなくクラスの大して1つしか
存在しないためメモリを抑えられます。

つまり
インスタンスを複数生成することが前提なクラスにメモリを抑えるメリットがあり
1つしかインスタンスを生成しないことが前提あればstaticにする必要はそこまでない
ということになります。


うーん。調べながらなので間違ってたならすみません。