Jaka jest rozsądna kolejność modyfikatorów Java (abstrakcyjne, ostateczne, publiczne, statyczne itp.)?


114

Jaka jest rozsądna kolejność modyfikatorów Java?

  • abstrakcyjny
  • finał
  • ojczysty
  • prywatny
  • chroniony
  • publiczny
  • statyczny
  • ścisłefp
  • zsynchronizowane
  • przejściowy
  • lotny

Aktualizacja

Zmieniłem sformułowanie z zalecanego na rozsądne , aby uspokoić dyskusje, czy zamówienie jest zalecane, czy nie.


To nie ma najmniejszego znaczenia i nie powinieneś tracić zbyt wiele czasu na mękę. Osobiście zawsze umieszczałem modyfikator dostępu na pierwszym miejscu, ale potem nie mogłem nawet powiedzieć, co mam robić dalej. Jeśli chcesz uzyskać odniesienie, spróbuj tutaj , ale nie jestem pewien, czy jest tam nawet określone.
Markiz Lorne

9
Zastanawiam się, dlaczego powinno to być pytanie „nie konstruktywne” (bliskie prośby). Możesz znaleźć zalecenie w specyfikacji (zobacz moją odpowiedź), a przestrzeganie tego zalecenia poprawi czytelność kodu. Statyczny analizator kodu (taki jak SONAR) będzie narzekać, jeśli użyjesz innego zamówienia.
FrVaBe

Jeszcze raz przyjrzałem się konwencjom kodu Oracle / Sun Java Code . O sprawie nawet się nie mówi, w jednym miejscu, w którym powinieneś szukać, i jednym miejscu, w którym spodziewałbyś się, że się pojawi.
Markiz Lorne

@EJB Konwencje kodu pochodzą z 1999 roku i zdecydowanie wymagają aktualizacji. Mam nadzieję, że włączą ten temat, jeśli kiedykolwiek jeszcze raz dotkną tych konwencji, bo to rzeczywiście dobre miejsce!
FrVaBe

1
Czy Eclipse może automatycznie sortować modyfikatory? Albo przynajmniej dać ostrzeżenie, jeśli nie są posortowane?
Roland,

Odpowiedzi:


126

Zwyczajowy porządek użycie modyfikatorów jest wymienione w języka Java Specification (a nie Java Virtual Machine Specification) np klasy modyfikatorów znajdziesz następującą definicję (wyciąg):

ClassModifiers:
    ClassModifier
    ClassModifiers ClassModifier

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

[…]

Jeśli w deklaracji klasy pojawiają się dwa lub więcej (odrębnych) modyfikatorów klas, to jest zwyczajowo, choć nie jest to wymagane, że pojawiają się one w kolejności zgodnej z kolejnością pokazaną powyżej w produkcji dla ClassModifier. (mały tekst na dole akapitu!)

Znajdziesz to zdanie w kilku innych miejscach, w których określono użycie modyfikatorów, np. Tutaj dla modyfikatorów pól.

Aktualizacja : Zastąpiłem „określone / zalecane” słowem „zwyczajowe”, aby była to akceptowalna odpowiedź. Weź to pod uwagę, jeśli czytasz komentarze ;-) (dzięki @EJP aby to jasne) - Mimo że to polecam użyć zwyczajowy porządek.

Google zaleca również używanie zwyczajowej kolejności podanej w specyfikacji Java.

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

Aktualizacja : Wprowadzono nowąinicjatywę „ Wytyczne stylu Java ” dla projektów w społeczności OpenJDK. Zawiera również zalecenie dotyczące kolejności modyfikatorów, a także zawiera nowy domyślny modyfikator Java 8.

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

1
Pytanie brzmiało: „Jaka jest zalecana kolejność modyfikatorów Java?” a odpowiedź na to pytanie znajduje się w specyfikacji języka (a ponieważ kolejność nie jest wymagana, powiedziałbym, że jest to zalecane w specyfikacji). Specyfikacja JVM dotyczy formatu pliku klas, a nie kodu źródłowego Java. - Rzeczywiście, kolejność nie ma znaczenia, ale jeśli zastosujesz się do zalecenia, Twój kod będzie bardziej czytelny dla innych. Myślę więc, że jest to rozsądne pytanie, na które można udzielić dokładnej odpowiedzi. Swoją drogą - statyczny analizator kodu (np. SONAR) zorientuje się w złej kolejności.
FrVaBe

3
Zdanie Jeśli w deklaracji klasy pojawiają się dwa lub więcej (odrębnych) modyfikatorów klasy, to jest zwyczajowo, choć nie jest to wymagane, że pojawiają się one w kolejności zgodnej z kolejnością pokazaną powyżej w produkcji dla ClassModifier. JEST CZĘŚCIĄ SPECYFIKACJI!
FrVaBe

1
W tym przypadku chciałem krzyczeć, ale już się uspokoiłem - przepraszam za to ;-) - ja też nie jestem tubylcem - więc prawdopodobnie masz rację przy tłumaczeniu językowym. W odpowiedzi chciałem tylko powiedzieć, że istnieje bardzo oficjalne miejsce, w którym obsługiwana jest kolejność modyfikatorów w kodzie źródłowym Java - i miałem szczęście znaleźć to, gdy zadałem sobie to samo pytanie. IMHO nie ma lepszego miejsca na znalezienie odpowiedzi niż w specyfikacji języka Java.
FrVaBe


1
@EJP Masz mocną opinię (~ brak polecanego zamówienia) na ten temat. Czy byłbyś tak uprzejmy, aby udzielić tego jako odpowiedzi? Jestem ciekawy sposobu głosowania.
FrVaBe

28

Rozsądne jest korzystanie z zamówienia zgodnie ze specyfikacją wirtualnej maszyny języka Java, tabela 4.4

  • publiczny
  • chroniony
  • prywatny
  • abstrakcyjny
  • domyślna
  • statyczny
  • finał
  • przejściowy
  • lotny
  • zsynchronizowane
  • ojczysty
  • ścisłefp

8
+1, które często widzisz: „public abstract”, „private static final” itp. Niektóre IDE (np. NetBeans) mają nawet pewne skróty, np. „Psf” lub „Psf”
Puce

1
Zalecaną kolejność można znaleźć w specyfikacji języka Java (a nie w specyfikacji wirtualnej maszyny języka Java!). Spójrz na moją odpowiedź.
FrVaBe

1
@FrVaBe Nie możesz znaleźć czegoś takiego. Nie myl gramatyki językowej z zaleceniami dotyczącymi stylu.
Markiz Lorne

@Puce: niektóre IDE (np. IntelliJ IDEA) mogą nawet poprawnie sortować modyfikatory.
Mot

5

Na podstawie ich wartości int.

Modyfikator (Java Platform SE 8)

  • 1: publiczny
  • 2: prywatne
  • 4: chroniony
  • 8: statyczne
  • 16: finał
  • 32: zsynchronizowane
  • 64: niestabilny
  • 128: przejściowy
  • 256: natywny
  • 512: interfejs
  • 1024: streszczenie
  • 2048: strictfp

1
ta odpowiedź nie zawiera słowa kluczowego „default”
Sero

1
Co wspólnego mają z tym ich wartości int?
Markiz Lorne

0

Używam dwóch reguł, aby zapamiętać sekwencję modyfikatorów, ale nie obejmuje strictefp, ponieważ nigdy nie jest używane. FYI.

  1. zsynchronizowani natywni są osobami o najniższym priorytecie.

  2. PPP AS FTV: PPP {dźwięk szumu} AS {oglądanie} FTV {France TV}.

:)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.