Объясните код if __name__ == “__main__” в терминах языка Java

177
28 февраля 2018, 08:45

Я новичок в Python и стараюсь понять все через язык, который знаю, - через Java. Наткнувшись на if __name__ == "__main__", впал в ступор. Читаю ответы по данной теме, но все равно инфа сложно "ложится". Есть ли аналог этих __name__ да "__main__" на языке Java? Заранее спасибо.

P.S. Не нужно писать про дубликат. В вопросах нет аналогов с Java. Не стоит рубить с плеча. Прочтите мой вопрос внимательно, пожалуйста.

Answer 1

По отдельности эти конструкции на Java не перевести, но вместо - вполне возможно если понимать что они делают.

Дело в том, что в Питоне любой модуль является исполнимым - и если его запустить, он всегда получает имя __main__. Ну а __name__ - это имя текущего модуля. Таким образом, проверка if __name__ == "__main__" проверяет что модуль был запущен из командной строки, а не был импортирован из другого модуля.

Иными словами, проверка if __name__ == "__main__" - это дополнительная точка входа в программу.

В языке Java точками входа в программу являются методы main:

public static void main(String[] args)
Answer 2

Подробный ответ на то, что делает эта констнукция в Python, есть по ссылке, приведённой пользователем Twiss в комментарии, перепечатывать я это не буду.

В Java аналога такой конструкции нет и быть не может. В отличии от Python, импорт класса в Java не выполняет весь его код автоматически, поэтому подобные костыли не нужны. Кроме того, в Java программу нельзя начинать выполнять с произвольного класса. Точкой входа в программу может быть только класс, в котором есть метод с сигнатурой

public static void main(String[] args)

Если попытаться запустить класс, в котором такого метода нет, то вылетит ошибка "Main method not found".

READ ALSO
API или Прямое подключение ?

API или Прямое подключение ?

Всем привет! Делаю первое Андроид приложение и задался вопросом как лучше реализовывать подключение к базе данных ?? Написать свое апи на стороне...

197
Как отключить слайдинг

Как отключить слайдинг

Всем день добрыйИспользую ViewPager и TabLayout в связке

203
Полиморфные методы VS поллиморфный instanceof

Полиморфные методы VS поллиморфный instanceof

При написании кода столкнулся с вопросом: а что же все таки быстрее? Набросал тест:

163
Tomcat websocket задать размер буфера для передачи blob

Tomcat websocket задать размер буфера для передачи blob

при передачи по ws больших объёмов на выскакивает такое

155