Синтаксис и формат синтаксиса Java
Я смущаюсь в отношении порядка модификаций доступа и не-доступа. Например
abstract void go()
abstract public void go()
public final void go()
void final go()
final class Test{}
class final Test{}
final abstract class Test{}
abstract final Test{}
Я никогда не знаю, что такое правильный порядок, и иногда я ошибаюсь, потому что существует так много возможных комбинаций. Есть ли определенный ориентир, который должен предшествовать другому?
Есть ли какое-либо описание формата и порядка, в котором они должны появляться в коде? Я пытаюсь найти руководство по синтаксису, но я не уверен, что он на 100% правильный. Вот он:
Methods:
[access modifier | nonaccess modifier] return-type method-name
Classes:
[access modifier | nonaccess modifier] class class-name
Interfaces:
[access modifier | nonaccess modifier] interface interface-name
Variables:
[access modifier | nonaccess modifier] variable-type variale-name
Ответы
Ответ 1
Из официальной грамматики языка программирования Java (упрощенного):
Modifier:
Annotation | public | protected | private
static | abstract | final | native | synchronized
transient | volatile | strictfp
ClassOrInterfaceDeclaration:
{Modifier} (ClassDeclaration | InterfaceDeclaration)
ClassBodyDeclaration:
{Modifier} MethodOrFieldDecl
MethodOrFieldDecl:
Type Identifier MethodOrFieldRest
Итак, для классов и интерфейсов модификаторы должны всегда отображаться перед ключевым словом class
и в любом порядке. Например, final public class
действителен, но class final
- нет. Для методов и полей это одно и то же, но модификаторы должны появляться перед типом.
Ответ 2
См. http://checkstyle.sourceforge.net/config_modifier.html.
Правильный (или, скорее, обычный) порядок:
- общественности
- защищенный
- частным
- абстрактный
- статичным
- конечная
- переходная
- летучий
- синхронизированы
- родной
- strictfp
Этот порядок должен прийти к вам в голову после нескольких дней программирования на Java.
Ответ 3
Как и на английском языке, прилагательные (модификаторы, такие как public
, static
, volatile
и т.д.) предшествуют имени, которое они описывают (class
, interface
, или любой тип, например int
или String
). Порядок модификаторов не имеет значения для языка, но, читая код, вы быстро обнаружите, что кажется более естественным.
Ответ 4
Модификаторы идут до class
или типа. Согласно Java Язык Спецификация, порядок между модификаторами не имеет значения.
Ответ 5
Да, там Спецификация языка Java, в котором объясняется все, что является допустимым синтаксисом в языке, и есть также соглашения о кодировании, используемые Oracle/Sun, которые немного устарели, но все еще объясняют многое.