aanything's blog

プログラミング、雑多な情報を徒然なるままに。気に入ったまとめを保存してます。

pricvate static final の使い方

pricvate static final String str = "test";

こんなやつをコードないでみることはよくある。

staticってなにって人は↓↓↓

【Java】 staticって何? | 一番かんたんなJava入門

staticで宣言された変数はクラス変数って呼ばれてクラスに一つになる。
クラスに属するのがstatic、インスタンスに属するのが非static。

public void func(){
// なんらかのの処理
}

みたいなやつはnewしたときに使ったりするようにnewごと(インスタンスごと)のもの。

呼び方も

Test test = new Test();
test.func

みたいな感じ

static の場合の呼び方は

Test.str

 って感じでnewせずに使える。。メモリ領域が違う。

本題

pricvate static final ってなんなの。

自クラスしか使えない、staticで変更効かない 変数

servletはひとつのインスタンスを共有して使う。(マルチスレッドの話)
HTTPリクエストが同時にたくさん来た時
pricvate static final みたいな変更されない定数を使うと同一インスタンスでも問題ない。
じゃあ private finalでよくない?

実際問題ない。

けど、なんこもインスタンス生成する必要があるケースだと、
private finalで定義された変数はその都度メモリ領域を喰ってしまう。そのためstaticを追加するとこで多少のメモリの節約を狙うことがよくあり
その慣例でpricvate static finalってなってたりするみたい。
ほかにも理由はあると思うけど。。

スレッドローカルで定義した定数はマルチスレッドにおいても安全に処理されます。(グローバル変数みたいな感じで)
むやみに使うのは良くないけど