Java修飾子の適切な順序は何ですか(抽象、最終、パブリック、静的など)?


114

Java修飾子の合理的な順序は何ですか?

  • 概要
  • 最後の
  • ネイティブ
  • 民間
  • 保護された
  • 公衆
  • 静的
  • strictfp
  • 同期
  • 一時的な
  • 揮発性

更新

順序が推奨されているかどうかにかかわらず、ディスカッションを落ち着かせるように、表現を推奨から妥当に変更しました。


それは少しでも関係ありません、そしてあなたはそれについて苦労するあまり多くの時間を無駄にすべきではありません。個人的には常にアクセス修飾子を最初に置きますが、その後は次に何をするかを伝えることさえできませんでした。参照が必要な場合は、こちらをお試しください。ただし、そこに指定されているかどうかはわかりません。
ローンの侯爵2013年

9
なぜこれが「建設的ではない」質問でなければならないのでしょうか(クローズリクエスト)。仕様(推奨事項を参照)で推奨事項を見つけることができます。この推奨事項に従うと、コードが読みやすくなります。静的コードアナライザー(SONARなど)は、別の順序を使用すると文句を言います。
FrVaBe 2013年

Oracle / Sun Java Code Conventionsをもう一度見ました。あなたが見なければならない1つの場所とあなたがそれが現れると予想する1つの場所で、問題は言及さえされていません。
ローン侯爵、2013年

@EJBコード規約は1999年のものであり、更新する必要があります。それが本当に良い場所であるので、もし彼らが再びこれらの慣習に触れたら、彼らがこのトピックを含むことを望みます!
FrVaBe 2013年

1
Eclipseは修飾子を自動的にソートできますか?または、少なくともソートされていない場合は警告を出しますか?
ローランド

回答:


126

修飾子の通常の使用順序は、Java言語仕様(Java仮想マシン仕様ではなく)に記載されています。たとえば、クラス修飾子の場合、次の定義(抽出)があります。

ClassModifiers:
    ClassModifier
    ClassModifiers ClassModifier

ClassModifier: one of
    Annotation public protected private
    abstract static final strictfp

[....]

2つ以上の(異なる)クラス修飾子がクラス宣言に含まれている場合は、必須ではありませんが、ClassModifierの生成で上に示した順序と同じ順序で表示されるのが通例です。(段落の下部にある小さなテキスト!)

この文は、修飾子の使用法が指定されている他のいくつかの場所にあります。たとえば、ここではフィールド修飾子です。

更新:「指定/推奨」を「慣例」に置き換えて、これを受け入れられる回答にしました。コメントを読む場合は、これを考慮してください;-)(これを明確にするために@EJPに感謝します)-それもかかわらず、慣習的な順序を使用することをお勧めします。

また、Java仕様に記載されている通常の順序を使用することお勧めします。

public / protected / private 
abstract 
static 
final 
transient 
volatile 
synchronized 
native 
strictfp

更新:OpenJDKコミュニティのプロジェクトには、新しい「 Javaスタイルガイドライン」イニシアチブが導入されています。また、修飾子の順序に関する推奨事項があり、Java 8の新しいデフォルト修飾子も含まれています

public / private / protected
abstract
static
final
transient
volatile
**default**
synchronized
native
strictfp

1
質問は「Java修飾子の推奨順序は何ですか?」でした。そして、この質問は言語仕様で答えられています(そして、順序は必要ないので、仕様で推奨されていると思います)。JVM仕様はクラスファイル形式に関するものであり、Javaソースコードに関するものではありません。-実際、順序は重要ではありませんが、推奨事項に従うと、コードが他の人に読みやすくなります。ですから、これは正確な答えが出せる合理的な質問だと思います。ちなみに、静的コードアナライザー(SONARなど)は、間違った順序について混乱します。
FrVaBe 2013年

3
2つ以上の(異なる)クラス修飾子がクラス宣言に含まれている場合、必須ではありませんが、ClassModifierのプロダクションで上に示した順序と同じ順序で表示されるのが通例です。仕様の一部です!
FrVaBe 2013年

1
この場合、私は叫びたかったのですが、私はすでに落ち着きました-それについて申し訳ありません;-)-私もネイティブではないので、あなたはおそらく言語の解釈が正しいです。私の答えで言いたかったのは、Javaソースコードの修飾子の順序が処理される非常に公式な場所があるということです。同じ質問を自分にしたとき、私はこれを見つけることができて幸運でした。私見Java言語仕様よりも答えを見つけるのに最適な場所はありません。
FrVaBe 2013年


1
@EJPあなたはそのトピックについて強い意見があります(〜推奨される順序はありません)。これを回答として提供していただけませんか。投票について知りたいです。
FrVaBe 2013年

28

Java仮想マシン仕様の表4.4に従って順序を使用するのが妥当です。

  • 公衆
  • 保護された
  • 民間
  • 概要
  • デフォルト
  • 静的
  • 最後の
  • 一時的な
  • 揮発性
  • 同期
  • ネイティブ
  • strictfp

8
よく見られる+1:「パブリックアブストラクト」、「プライベートスタティックファイナル」など。一部のIDE(NetBeansなど)には、「psf」や「Psf」などのショートカットさえあります
Puce

1
推奨される順序は、Java言語仕様(Java仮想マシン仕様ではありません)にあります。私の答えを見てください。
FrVaBe 2013年

1
@FrVaBeあなたはそのようなことを見つけることができません。言語文法とスタイルの推奨事項を混同しないでください。
ローン侯爵、2013年

@Puce:一部のIDE(IntelliJ IDEAなど)では、修飾子を正しく並べ替えることもできます。
Mot

5

それらのint値に基づいています。

修飾子(Java Platform SE 8)

  • 1:公開
  • 2:プライベート
  • 4:保護
  • 8:静的
  • 16:最終
  • 32:同期
  • 64:揮発性
  • 128:一時的
  • 256:ネイティブ
  • 512:インターフェース
  • 1024:抽象
  • 2048:strictfp

1
この回答にはキーワード「デフォルト」は含まれていません
Sero

1
それらのint値はそれとどのような関係がありますか?
ローンの侯爵

0

2つのルールを使用して修飾子シーケンスを覚えていますが、strictfpは含まれていません。私が使用することはないためです。ご参考までに。

  1. 同期されたネイティブは優先度が最も低い人々です。

  2. PPP AS FTV:PPP {ノイズサウンド} AS {視聴} FTV {フランスTV}。

:)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.