Javaでは、定数(一般に、static final修飾子がついたフィールド)の名前は全て大文字でアンダースコアで単語間をアンダースコアで結びます。
public class JFrame extends ... { public static final int EXIT_ON_CLOSE = 3; : }
一方、イミュータブル(一度代入したら再代入不可)な設計をするフィールドでは、finalを使用します。クラス変数の場合はstatic finalを使用します。このとき、上述の定数がstatic finalで宣言されるので、定数とイミュータブルなクラス変数とは修飾子が同じとなり、区別があいまいになります。
例えば、ログのためのLoggerインスタンスはクラスごとに1つあればよいので、static finalで宣言します。この場合、定数の命名規約を採用するか、フィールドの命名規約を採用するか悩みが生じます。
- 定数の命名規約を採用した場合
public class Foo { private static final Logger LOGGER = Logger.getLogger(Foo.class.getName()); : }
- フィールドの命名規約を採用した場合
public class Foo { private static final Logger logger = Logger.getLogger(Foo.class.getName()); : }
僕個人としては、どちらかといえば意味的に後者と思っているのですが、確固たる信念には至っておらず、ちょっとグレーゾーンな感じです。