Topjava — онлайн-школа по обучению программированию на самом популярном в мире языке Java
Первое занятие бесплатно
Руководство Google по стилистике написания кода на Java. Часть 1
1 Введение
В данном документе описаны стандарты написания кода на языке программирования Java в корпорации Google. Исходный код Java считается соответствующим этим стандартам тогда и только тогда, когда он удовлетворяет всем описанным в документе правилам.

Затронутые в руководстве темы касаются не только эстетической стороны написания кода, но равным образом и других типов соглашений или стандартов. Тем не менее, данный документ концентрируется в первую очередь на определении строгих правил, которым мы повсеместно следуем, и не дает рекомендаций, которые могут быть неверно реализованы (как человеком, так и машинными инструментами).
1.1 Терминология
В рамках этого руководства определены следующие термины:

1. Термин класс используется для обозначения «обычного» класса, класса enum, интерфейса или типа аннотации (@interface).

2. Термин член (класса) используется для обозначения вложенного класса, поля, метода или конструктора, то есть для всех элементов высшего уровня класса, кроме блоков инициализации и комментариев.

3. Термин комментарий всегда относится к комментариям реализации. Мы не используем словосочетание «комментарии к документации», а вместо этого используем термин «Javadoc».

Остальная терминология будет даваться по мере необходимости в разных местах данного руководства.
1.2 Примечание к руководству
Примеры кода в данном документе не демонстрируют единственно верный стилистический подход к его написанию, хотя и используются в этом руководстве.
2 Исходный файл. Основы
2.1 Имя файла
Имя исходного файла состоит из имени одного конкретного класса высшего уровня, содержащегося в этом файле, с учетом регистра и расширения .java.
2.2 Кодировка файла: UTF-8
Для исходных файлов используется кодировка UTF-8.
2.3 Специальные символы
2.3.1 Символы пробела
Помимо символов завершения строки, горизонтальный символ пробела ASCII (0x20) является единственным символом пробела, встречающимся в исходном файле. Это означает, что:

1. Все прочие символы пробелов в символьных и строковых литералах избегаются.

2. Символы табуляции не используются для разметки абзацев.
2.3.2 Особые символы экранирования
Для каждого из особых символов экранирования (\b, \t, \n, \f, \r, \", \' и \\) предпочтительнее использовать именно такой символ вместо соответствующего ему восьмеричного значения (например, \012) или кода Unicode (например, \u000a).
2.3.3 Символы не из таблицы ASCII
Для прочих символов не из таблицы ASCII используется действующий символ Unicode (например, ∞) или эквивалентный символ экранирования (например, \u221e). Выбор символа зависит только от того, легко ли прочитать и понять код, хотя символы экранирования Unicode вне строковых литералов и комментариев строго не рекомендуются.
Подсказка: При использовании символов экранирования в кодировке Unicode и в тех случаях, когда применяются действующие символы Unicode, убедительно рекомендуем предоставлять объясняющие комментарии.
Примеры:
Подсказка: Никогда не делайте ваш код менее читаемым только из опасения, что некоторые программы не смогут правильно обработать символы не из таблицы ASCII. Если такое происходит, такие программы работают неверно и должны быть исправлены.
3 Структура исходного файла
Исходный файл состоит из следующих элементов, в указанном порядке:

1. Информация о лицензии или авторских правах, если имеется

2. Объявление пакета

3. Объявление импортов

4. Объявление класса

Ровно одна пустая строка разделяет каждый раздел, если таковые имеются
3.1 Информация о лицензии или авторских правах, если имеется
Если информация о лицензии или авторских правах относится к файлу, здесь она и размещается.
3.2 Объявление пакета
Пакет объявляется без переноса строки. Ограничения по ширине строки (Раздел 4.4, Ограничения по ширине строки: 100) не касаются объявления пакета.
3.3 Объявления импортов
3.3.1 Не разрешаются подстановки при объявлении импортов
Подстановки при объявлении импортов, статических или нет, не используются.
3.3.2 Не разрешается перенос строки
Импорты объявляются без переноса строки. Ограничения по ширине строки (Раздел 4.4, Ограничения по ширине строки: 100) не касаются объявлений импортов.
3.3.3 Упорядочивание и пробелы
Импорты упорядочиваются следующим образом:

1. Все статические импорты размещаются в простом блоке.

2. Все не статические импорты размещаются в простом блоке.

Если объявляются как статические, так и не статические импорты, они разделяются пустой строкой. Других пустых строк между объявлениями импортов нет.

Внутри каждого блока импортируемые имена следуют в порядке, установленном ASCII. (Примечание: это не то же самое, что упорядочивать объявления импортов согласно ASCII, поскольку '.' следует перед ','.)
3.3.4 Статический импорт классов не разрешается
Статический импорт не используется для статических вложенных классов. Такие классы импортируются с объявлением нормального импорта.
3.4 Объявление класса
3.4.1 Объявляется ровно один класс высшего уровня
Каждый класс высшего уровня располагается в своем исходном файле.
3.4.2 Упорядочивание содержимого класса
Порядок, выбираемый при расположении членов и блоков инициализации класса, может оказать большое влияние на легкость освоения кода. Так или иначе, для этого не существует простого и правильного рецепта; разные классы могут упорядочивать свое содержимое по-разному.

Важно то, чтобы у каждого класса был такой логический порядок расположения содержимого, который позволил бы программисту, читающему код, объяснить его. Например, новые методы не добавляются просто в конец класса, как если бы они вставлялись в хронологическом порядке, так как это не является упорядочиванием по логике.
3.4.2.1 Перегрузки: без разделений
Когда у класса есть несколько конструкторов или методов с одинаковым именем, они должны располагаться последовательно, без другого кода между ними (даже между приватными членами).
Оригинал руководства Google Java Style Guide