Предпочтительное расположение метода main() в файле класса Java

Когда дело доходит до методов порядка/последовательности в классе java. Где вы ожидаете/предпочитаете видеть метод main()?

  • вверху перед каждым полем (чтобы подчеркнуть его существование и заставить его его использовать)
  • внизу (чтобы пользователь мог сначала увидеть поля, а затем открыть главное)
  • после c-tor
    или ... .

Пожалуйста, поделитесь своими мыслями, это своего рода стилистический/философский вопрос. Пожалуйста, не предлагайте хранить main() в отдельном файле.


person Roman Ivanov    schedule 27.10.2011    source источник
comment
Почему бы не сохранить функцию main() в отдельном файле? Если вы не хотите использовать ООП, не используйте java...   -  person    schedule 27.10.2011
comment
Это хороший стиль, чтобы избежать смешивания разбора аргументов и какой-либо подготовки перед вызовом, например job.doAll().   -  person Roman Ivanov    schedule 27.10.2011
comment
спасибо всем за ваши мнения. Наша команда решила поставить main на первое место в классе, поскольку это точка входа в функциональность класса.   -  person Roman Ivanov    schedule 10.04.2013


Ответы (4)


Я всегда ставлю его в конец, потому что так делают в C. "Tradition". Что может быть не очень хорошей причиной. :-)

person user949300    schedule 27.10.2011
comment
Java основан на C... это хорошая причина. - person Bohemian♦; 27.10.2011

Это только мои мысли:

main() — это статический метод, не связанный с экземплярами объекта. Мы знаем, что он существует как точка входа, которая делает нашу программу/класс исполняемым.

Дело в том, что в Java все (кроме примитивов) является объектом, поэтому main() должен быть где-то объявлен в каком-то классе. Код, который может выполнять такой статический метод, больше связан с настройкой программы для выполнения и делегированием нашей бизнес-логике (объектам, которые действительно что-то делают) запуск приложения. Таким образом, его забота отличается от остального нашего класса (который определяет некоторые данные и поведение, которые мы пытаемся инкапсулировать).

main() на самом деле не относится к данным и поведению наших повседневных классов, так как я сомневаюсь, что каждый класс должен быть исполняемым сам по себе. main() занимается запуском нашей программы. Таким образом, он должен быть объявлен отдельно от наших бизнес-объектов, в модуле проекта, связанном с запуском/выполнением приложения. Итак, как вы могли догадаться, я предлагаю именно то, что вы сказали не предлагать - держать main подальше от ваших классов и логики, насколько это возможно, и объявлять его только в контексте точки входа в ваше приложение.

Что касается местоположения в самом файле, я не думаю, что это имеет значение, если очевидно, что код в этом файле связан с настройкой и запуском программы.

person filip-fku    schedule 27.10.2011
comment
спасибо, мы сохранили main() специальные классы запуска, но у нас есть один проект, который содержит классы number utils, которые можно запускать из main() - это удобно. Но создание отдельного/дополнительного класса, который настраивает и запускает бизнес-класс, удвоит количество классов и сделает код менее простым. Итак, мы ищем компромисс, чтобы сохранить main() в том же классе, но при этом сохранить класс, который легко расширять и понимать, как с ним работать. - person Roman Ivanov; 28.10.2011

Компания Sun Microsystems опубликовала свои Соглашения о коде для языка программирования Java много лет назад, и многие организации следуют им в той или иной степени.

В этом разделе предлагается помещать методы в конец файла. . И, как вы знаете, main — это «просто еще один метод», хотя и метод класса, а не метод экземпляра.

Хотя никто не заставляет вас следовать соглашениям Sun, может быть небольшое преимущество в том, чтобы придерживаться их относительно близко, поскольку в этом есть определенная степень знакомства. Большинство (если не все) стандартных библиотек JDK будут следовать ему.

ИМХО, это веская причина, чтобы использовать последний метод. Что касается размещения main среди методов, сработает его размещение первым или последним. Если вы находите его каким-то образом «особенным», поместите его последним в файле.

person Ray Toal    schedule 27.10.2011

Я предполагаю, что вы не размещаете метод main() систематически в каждом написанном вами классе (в этом более позднем случае вы должны вместо этого предусмотреть написание модульных тестов).

Пока ваш класс содержит метод main() и является точкой входа вашего приложения, этот класс не должен вести себя иначе, чем инициализация приложения. Эта передовая практика называется «Разделение ответственности»: один класс = одна ответственность.

Если это так, у вас не должно быть так много методов в вашем классе. Я лично всегда сортирую методы по важности: самые важные/полезные/центральные методы находятся выше всех остальных методов, которые не добавляют никакой реальной работы (для меня это сеттеры и геттеры).

Таким образом, читатель получает доступ к самой важной информации в первую очередь.

Конечно, кодирование с использованием соглашения Java, которое я рекомендую, подразумевает, что вы сначала объявляете поля своего класса, прежде чем объявлять свои методы.

person Olivier B.    schedule 28.10.2011