Ответ 1
Виртуальная машина Java (JVM) должна запускать приложение где-нибудь. Поскольку у Java нет понятия "вещи вне класса", метод, который вызывается JVM, должен находиться в классе. И поскольку он статичен, экземпляр этого класса еще не создан.
Почему основной метод должен быть помещен в класс? Я понимаю основные идеи ООП, но я не могу понять, почему основная программа определена внутри класса. Будет ли такой экземпляр каким-то экземпляром? Я имею в виду, что вне класса нет кода. Что является причиной для определения класса и никогда не использовать объекты этого класса?
Виртуальная машина Java (JVM) должна запускать приложение где-нибудь. Поскольку у Java нет понятия "вещи вне класса", метод, который вызывается JVM, должен находиться в классе. И поскольку он статичен, экземпляр этого класса еще не создан.
Хотя верно, что java не имеет понятия методов вне классов, было бы довольно легко позволить разработчикам пропустить весь бройлерный план фактически записи определения класса и просто позволить людям писать основная функция напрямую, если они тоже хотели.
Но когда люди развивали java, люди были более догматичны относительно OO, тогда они сейчас, и это, вероятно, сыграло большую роль. Подумайте об этом в качестве примера Мнение программного обеспечения
У него есть одна полезная функция, которая позволяет основным функциям любого класса и запускать их в виде программ. Это удобно для тестирования определенных функций этих классов, когда вы работаете над ними. Если main() должен быть в отдельном файле, а не в классе, это затруднит ситуацию. Что делать, если вы хотите больше одной функции main()? Что делать, если вы хотите написать функции, которые будут вызываться основной вне класса? Пойдут ли они в глобальное пространство имен? Будут ли возникать многочисленные функции main()?
Не похоже на то, что эти проблемы невозможно решить, но другие, но немного лишние, что может быть особенно раздражающим для новичков, текущее решение не так уж плохо, тем более что IDE будут генерировать основную структуру класса при создании нового файл.
Это упрощает дизайн виртуальной машины. Поскольку виртуальная машина уже знает, как запустить статический метод класса, тогда он может рассматривать основной метод так же, как и любой другой статический метод.
Если вы поместите основной метод в любую другую конструкцию, отличную от класса, тогда виртуальная машина должна быть изменена, чтобы узнать о другой конструкции, еще более усложняющей ситуацию.
Когда язык Java был разработан, понятие о том, что все должно быть объектом, было точкой догматизма. (хотя они оставили несколько примитивных типов). В наши дни вы, возможно, можете создать язык, который использует закрытие - даже один вне любого класса - вместо этого.
Что сказал @Bombe. Я бы добавил, что для пуристов OO тот факт, что класс входа не создан, является ошибочным. Причина в том, что статическая основа не позволяет кому-то писать семейство основных классов, которые используют один и тот же метод main(), написанный с использованием шаблона шаблона .
Если Java была написана для создания экземпляра основного класса и вызова основного метода, пользователи пользовались бы преимуществами наследования и интерфейсов.
Как нам известно, главная точка входа для запуска JVM. А в java нет ничего, кроме классов и интерфейсов. Поэтому у нас должен быть основной метод в классе, который тоже должен быть открытым классом. и главное должно быть общедоступным, потому что оно должно быть доступно для JVM для запуска и статического, поскольку оно начинается без создания каких-либо объектов.
Основная причина заключается в том, что у нескольких классов может быть основной метод. Таким образом, в базе кода может быть много "точек входа", и один просто использует класс, чтобы указать, какой из них вызывается. Кроме того, это встроено в проект OO, где (почти) все является объектом.
Main в java - это статический метод, поэтому класс, который он не должен быть создан в объект, класс просто нужно загрузить.
Это просто, как была разработана Java: (почти) все является объектом, а код может существовать только как часть класса.
Так как main()
является статическим, он, как он называется, автоматически не приводит к созданию экземпляра класса. Тем не менее, вполне возможно (и довольно часто, по крайней мере, в небольших программах и апплетах Swing) иметь класс, который содержит main()
, в противном случае обычный класс, который создается и используется как любой другой класс.