【Java】private static finalな定数とは何か?そもそもstaticにする意味あるんですか?と気になったのでまとめました!

f:id:koko55120:20220118140929j:plain

Javaの中でそのクラスでのみ使う定数のアクセス修飾子で、"private static final"ってやつ見たことありませんか?


そもそも、このアクセス修飾子の本質的な意味を考えていませんでしたが、
「static」にする意味あるのか・・・とふと思ったのでいろいろ調べてみた備忘録が本記事の内容です。




private static final修飾子について

f:id:koko55120:20210518231918j:plain

class test {

private static final String = "HOHE_HOGE_HOGE”;

}


「prvate static final」とは何か?
初めに、結論から言うとprvate static final修飾子は

"そのクラスでしかアクセスできないかつクラスに1つである定数"ということです。

このprvate static final修飾子にはこんなメリットがあります。



メリット

staticにすることでメモリを抑えるというメリットがあります。
インスタンスを複数生成することを前提とするクラスには有効的


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


次にstatic修飾子というのは、クラスに対して静的である。
簡単に言うとインスタンスをいくつ生成しようがそのクラスに1つしか存在しないことを担保する修飾子です。


アクセス修飾子については以下の記事に書いてあったので参考にしてみてください!
java-code.jp



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

class test {

private  final String = "HOHE_HOGE_HOGE”;

}


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


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


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




private static finalについて色々調べた結果

f:id:koko55120:20210518225300j:plain
static変数とインスタンス変数の違いは
クラスに対して1つであるか。インスタンスに1つであるという違いです。


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


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


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

ということになります。




さいごに

最後まで読んでいただき、ありがとうございました。

もし、記載している内容が間違えていれば遠慮なくコメントしてください!
私自身の勉強になりますし、他の人がこの記事を見た時に間違えた情報を見ることになってしまうので💦

関連記事・おすすめ記事

www.engineer-wataru.com


www.engineer-wataru.com


wataru55120.hatenablog.jp


↓オススメ書籍↓

スッキリわかるJava入門第3版 [ 中山清喬 ]

価格:2,860円
(2022/1/17 17:09時点)
感想(7件)


JavaプログラマGold SE 8 試験番号:1Z0-809 (オラクル認定資格教科書) [ 山本道子(プログラミング) ]

価格:4,620円
(2022/1/17 17:10時点)
感想(0件)


新人エンジニアのための データベースのしくみと運用がわかる本【電子書籍】[ 五十嵐貴之 ]

価格:2,178円
(2022/1/17 17:11時点)
感想(0件)