コードのメンテナンス性や可読性の目的であれば文字列を定数にするのは良いことですが、性能のためだけに無理に文字列を定数にする意味はありません。文字列に関する最適化は他にもあります。正解だ、と考えた方もおられることでしょう。メソッド呼び出しになります。インスタンスを取得する実装になっています。インスタンスを事前生成して配列に保持する実装です。背景や考慮事項も含めて詳細に書かれています。個であることに納得されているのではないでしょうか。初期化されないはずです。生成されるというシナリオも想像されます。遅延初期化してもよい旨が明記されていたりもします。ブレークポイントを当てた状態で起動してみると良いです。初期化された後にしか実行され得ないという見解です。再確認するだけになっています。いう標準クラスを使っています。作れるので面白いです。最適化の都合に起因しています。オプション付きで実行することで観察することができます。インスタンスが作られる、という原理でした。実用的なプログラムではこれらの例外の方がありがちかもしれません。呼び出し元のメソッドが異なるときに例外のインスタンスを使い回すとスタックトレース情報が正しくない情報になってしまい、デバッグ時に混乱してしまいそうです。実際は、スタックトレース情報を持たない例外インスタンスが使い回される挙動になります。回といった大量の回数の例外が発生するまでは当該挙動にならないので、問題は少ないと言えるでしょう。いえ、大量の例外の中に稀に呼び出し元が異なる例外が混ざっている場合などにはデバッグに困るかもしれません。オプションを付けることでこの挙動を抑制できます。インスタンスが作られてしまうことがありえるかもしれません。書いて実験するとそのような結果になることがありえるようです。間に合わなくなりやすいのではないでしょうか。オプションの存在を知っている方への引っ掛け問題でした。する例外でも適用されます。