Java初心者はstatic使うな!
ジュニアエンジニアのソースコードをレビューしていてよく思うことは 「よくわかってないのにstatic使うんじゃねえ!」
staticが危険なのは複数スレッド間で共有されるという点です。 thread-safeという言葉が密接に絡んできますね。
では具体的に何が問題か? thread間で共有されるとどういう現象が起こるか、と考えるとわかりやすいですね。
たとえば、thread1からあるオブジェクトを「変更している間」にthread2から参照するとき、「変更されつつある中途半端なオブジェクト」が参照される可能性があります。
Javaは高速ですが、時間を無視して動くわけではありません。 操作には必ずその実行時間が存在します。
これ系で有名なのはSimpleDateFormatですかね。 ご存知なければググってもらえるとわかりますが、thread-safeでないためこの問題が起こり得ます。 ちなみにthread-safeでない旨はjavadocに書いてます。
staticを使用することでnewするコストを省けるのは確かなんですが、個人的にはstaticによるチューニングは後回しでいいと思います。
それよりも、よりバグの少ないプロダクトを作るほうが重要。 しかもstaticが原因のバグはマルチスレッド関係なので検証しづらいですね。
そんなわけで、そもそもマルチスレッドやthread-safeという言葉を理解していない初心者にはstaticを使わせないのが無難です。
staticを使わずを得ない状況では、共有するオブジェクトが本当にthread-safeか、マルチスレッド処理を理解してるメンバーがサポートする必要があるでしょう。