По пробую провести аналогию с реальным миром, возможно так будет понятней.
Метод main - это как дверной проем в квартиру, в которую вы хотите что то передать или забрать. А объекты классов - это все предметы в этой квартире, поэтому в каждом классе не требуется наличие дверного проема. Возвращаясь опять к практике, чтобы операционная система могла запустить процесс(программу), ей надо знать точный адрес дверного проема, это и есть main функция которая стандартизирована для исполняемых файлов и динамических библиотек. Очень часто присутвует в явном виде почти во всех языковых платформах, будь то Java, C#, C++, Python.
Класс - это как лейкало для объектов, чтобы создать объект его надо проинициализировать, и после этого вы можете с ним выполнять любые операции которые позволяет этот класс, вызывая методы или обращаясь к полям. Зайдя в квартиру находим нужное лейкало, создаем себе объект и вуаля, делаем с ним что надо.
Например в случае с динамическими библиотеками, это дверь есть но она скрыта за кулисами, так как основная цель библиотеки переиспользовать классы, поэтому это квартира в которую передать ни чего нельзя но выносить можно. Что касается примера со Spring то не столь важно сколько строк в самой функции важно что при запуске процесса, main функция передаст управление во фреймворк, а феймворк проинициализирует необходимые вещи.
Как если бы пришел человек из ростелекома провел вам кабель для интернета в квартиру, вы подключили к компьютеру и после этого можете получать сообщения от друзей. Операционная система при запуске процесса передала в main функцию все аргументы которые были указаны при запуске, например порт, а Spring начал слушать все сообщения на этом порту.
Надеюсь удалось прояснить ситуацию, а не еще больше запутать. С аналогиями всегда 50 на 50 шансы)
Pythonмимо, там естьif __name__ == '__main__':, но это нужно только для того, что ограничить код при импортировании скрипта в другой -- в этот момент будет выполняться код. Поэтому, нет в питоне аналогаmainфункции – gil9red Oct 03 '20 at 06:37sys.argvбудет один в один. Просто в питоне смешали два в одно, и потому чтобы это как то различать необходимо проверять__name__чтобы понять что этот модуль был вызван как исполняемый, а не в результате импортирования. Просто немного под другим углом на это смотрю) – Mike Lazko Oct 03 '20 at 18:57if __name__ == '__main__':, но это только для ограничения кода, чтобы не был выполнен код в этом условии при импортировании и всё -- https://ru.stackoverflow.com/a/515853/201445 . Берем, c++, в нем точка входа кода в функцииmainу питона код всегда выполняется с первой строчки скрипта (с самого верха) и при импортировании скриптов, у них тоже выполняется код с первой строки их файлов – gil9red Oct 04 '20 at 03:10