Який розумний порядок модифікаторів Java (абстрактні, кінцеві, загальнодоступні, статичні тощо)?


114

Який розумний порядок модифікаторів Java?

  • реферат
  • остаточний
  • рідний
  • приватний
  • захищені
  • громадські
  • статичний
  • strictfp
  • синхронізований
  • минущі
  • непостійний

Оновлення

Я змінив формулювання з рекомендованого на розумне , щоб заспокоїти дискусії, рекомендується чи ні.


Це не має ніякого значення, і ви не повинні витрачати на це занадто багато часу. Особисто я завжди ставив модифікатор доступу спочатку, але після цього навіть не міг сказати, що я роблю далі. Якщо ви хочете посилання, спробуйте тут , але я не впевнений, що він там навіть вказаний.
Маркіз Лорнський

9
Цікаво, чому це повинно бути "не конструктивним" питанням (закриті запити). Ви можете знайти рекомендацію в специфікації (див. Мою відповідь), і слідування цій рекомендації поліпшить читабельність коду. Аналізатор статичного коду (наприклад, SONAR) подасть скаргу, якщо ви використовуєте інше замовлення.
FrVaBe

Я ще раз поглянув на конвенції Oracle / Sun Java Code . Справа навіть не згадується в тому місці, де ви повинні шукати, і в тому місці, де ви очікували б появи.
Маркіз Лорн

@EJB Конвенції про кодекси створені з 1999 року і настійно потребують оновлення. Я сподіваюся, що вони включать цю тему, якщо вони коли-небудь знову торкнуться цих конвенцій, оскільки це дійсно гарне місце!
FrVaBe

1
Чи може Eclipse сортувати модифікатори автоматично? Або, принаймні, попередити, якщо вони будуть несортованими?
Roland

Відповіді:


126

Звичайний порядок застосування модифікаторів згадуються в специфікації мови Java (а не в Специфікації Java Virtual Machine) , наприклад , для класу модифікаторів ви знайдете наступне визначення (екстракт):

ClassModifiers:
    ClassModifier
    ClassModifiers ClassModifier

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

[....]

Якщо в декларації класу з'являються два або більше модифікаторів класу (окремі), то вони, як правило, не вимагаються, щоб вони з'являлися в порядку, що відповідає тому, що показано вище у виробництві для ClassModifier. (невеликий текст внизу абзацу!)

Ви знайдете це речення в кількох інших місцях, де вказано використання модифікаторів, наприклад тут для модифікаторів поля.

Оновлення : я замінив "вказане / рекомендоване" на "звичайне", щоб зробити це прийнятною відповіддю. Враховуйте це, якщо ви читаєте коментарі ;-) (дякую @EJP, щоб це було зрозуміло) - Тим не менш, я б рекомендував користуватися звичайним замовленням.

Google також рекомендує використовувати звичайний порядок, зазначений у специфікації 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

3
Речення Якщо два або більше (різних) модифікаторів класу відображаються в декларації класу, то, як правило, не вимагається, щоб вони відображалися в порядку, узгодженому з наведеним вище у виробництві для ClassModifier. ЧАСТИНА СПЕЦИФІКАЦІЇ!
FrVaBe

1
У цьому випадку я хотів кричати, але я вже заспокоївся - так шкодую про це ;-) - Я теж не рідний - так що ви, мабуть, праві в тлумаченні мови. Що я просто хотів сказати своєю відповіддю, що це дуже офіційне місце, де виконується порядок модифікаторів у вихідному коді Java - і мені пощастило знайти це, коли я задав те саме питання собі. У IMHO немає кращого місця для пошуку відповіді, ніж у специфікації мови Java.
FrVaBe


1
@EJP Ви маєте тверду думку (~ не рекомендується замовлення) на цю тему. Ви б були так люб'язно надати це як відповідь? Мені цікаво голосування.
FrVaBe

28

Доцільно використовувати замовлення відповідно до Специфікації Java Virtual Machine, Таблиця 4.4

  • громадські
  • захищені
  • приватний
  • реферат
  • за замовчуванням
  • статичний
  • остаточний
  • минущі
  • непостійний
  • синхронізований
  • рідний
  • strictfp

8
+1 ви часто бачите: "публічний конспект", "приватний статичний фінал" тощо. Деякі IDE (наприклад, NetBeans) навіть мають деякі ярлики, наприклад, "psf" або "Psf"
Puce

1
Рекомендоване замовлення можна знайти в специфікації мови Java (а не в специфікації Java Virtual Machine!). Погляньте на мою відповідь.
FrVaBe

1
@FrVaBe Ви такого не можете знайти. Не плутайте мовні граматики з рекомендаціями щодо стилю.
Маркіз Лорн

@Puce: деякі IDE (наприклад, IntelliJ IDEA) навіть можуть правильно сортувати модифікатори.
Пн

5

Виходячи з їх int значень.

Модифікатор (платформа Java SE 8)

  • 1: громадськість
  • 2: приватний
  • 4: захищений
  • 8: статичний
  • 16: фінал
  • 32: синхронізовано
  • 64: летючі
  • 128: перехідний
  • 256: рідний
  • 512: інтерфейс
  • 1024: реферат
  • 2048 р.: Striffp

1
ця відповідь не включає ключове слово "за замовчуванням"
Sero

1
Які їх значення мають int?
Маркіз Лорн

0

Я використовую два правила, щоб запам’ятати послідовність модифікаторів, але не включає строгий fp, оскільки він ніколи не використовується мною. FYI.

  1. синхронізовані рідні - найменш пріоритетні люди.

  2. PPP AS FTV: PPP {шум звуку} AS {перегляд} FTV {France TV}.

:)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.