Почему метод main является static
Перейти к содержимому

Почему метод main является static

  • автор:

Почему основной метод объявлен общедоступным и статическим в Java?

В этом посте мы обсудим, почему метод main объявлен общедоступным и статическим в Java.

Мы знаем, что основной метод служит точкой входа для приложения. JVM (виртуальная машина Java) начинает свое выполнение, вызывая основной метод указанного класса, и main() впоследствии вызовет все другие методы, требуемые программой.

1. Почему основной метод объявлен статическим в Java?

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

Если основной метод нестатичен, то JVM должна создать экземпляр класса, и будет неоднозначность, если конструктор этого класса принимает аргумент — какой конструктор должен вызываться JVM и какие параметры должны быть переданы? Мы знаем, что JVM не может создать экземпляр Java класс без вызова метода конструктора. Мы можем договориться о конструкторе по умолчанию, но это дополнительные накладные расходы. Кроме того, класс не должен быть абстрактным; в противном случае JVM не сможет его создать. Чтобы сделать Java немного менее многословной, чем она есть, основной метод в Java является статическим.

2. Почему основной метод общедоступен в Java?

Мы знаем, что любой может получить доступ/вызвать метод, имеющий спецификатор открытого доступа. Основной метод является общедоступным в Java, потому что он должен вызываться JVM. Так что если main() не является общедоступным в Java, JVM не будет его вызывать.

Вот и все, почему метод main объявлен общедоступным и статическим в Java.

Оценить этот пост

Средний рейтинг 4.37 /5. Подсчет голосов: 19

Голосов пока нет! Будьте первым, кто оценит этот пост.

Сожалеем, что этот пост не оказался для вас полезным!

Расскажите, как мы можем улучшить этот пост?

Как работает метод main в Java

main в Java – это обычно первый метод, о котором узнают начинающие, потому что он является точкой входа в программирование на Java. Метод main может содержать код для выполнения или вызова других методов и его можно вложить в любой класс, который является частью программы. Более сложные программы обычно содержат класс, в котором есть только метод main. Название класса, содержащего main, может быть любым, но обычно его называют просто класс Main.

В следующих примерах класс, содержащий метод main, называется Test:

public class Test public static void main(String[] args) System.out.println("Hello, World!"); > >

В этом мануале мы разберем, что значит каждая составляющая данного метода.

Синтаксис метода Main

Синтаксис метода всегда выглядит так:

public static void main(String[] args) // some code >

Изменить здесь можно только название аргумента массива String. Например, вы можете изменить args на myStringArgs. Аргумент массива String может быть записан как String… args или String args[].

Модификатор public

Чтобы JRE могла получить доступ к main методу и выполнить его, модификатором доступа этого метода должен быть public. Если метод не является public, доступ к нему будет ограничен. В следующем примере кода в методе main модификатор доступа public отсутствует:

public class Test static void main(String[] args) System.out.println("Hello, World!"); > >

Возникает ошибка при компиляции и запуске программы. Это происходит потому, что метод main не является общедоступным и JRE не может его найти:

Error: Main method not found in class Test, please define the `main` method as: public static void main(String[] args) or a JavaFX application class must extend javafx.application.Application

Модификатор static

При запуске Java-программы объект класса отсутствует. Чтобы JVM могла загрузить класс в память и вызвать main метод без предварительного создания экземпляра класса, main методу нужен модификатор static. В следующем примере кода в main методе нет модификатора static:

public class Test public void main(String[] args) System.out.println("Hello, World!"); > >

Так как метод main не имеет модификатора static, при компиляции и запуске программы возникает следующая ошибка:

Error: Main method is not static in class Test, please define the `main` method as: public static void main(String[] args)

Модификатор void

Каждый метод Java должен указывать тип возвращаемого значения. Тип возвращаемого значения main метода в Java — void, поскольку он ничего не возвращает. Когда main метод завершает выполнение, программа Java завершает работу, поэтому в возвращаемом объекте нет необходимости. В следующем примере метод main пытается что-то вернуть при типе возврата void:

public class Test public static void main(String[] args) return 0; > >

При компиляции программы возникает ошибка, потому что Java не ожидает возврата значения, когда тип возврата void:

Test.java:5: error: incompatible types: unexpected return value return 0; ^ 1 error

Метод main

При запуске программа Java всегда ищет метод main. Данный метод может называться только так, его нельзя переименовывать. В следующем примере кода мы для наглядности переименовали main метод в myMain:

public class Test public static void myMain(String[] args) System.out.println("Hello, World!"); > >

Во время компиляции и запуска программы возникает ошибка, так как JRE не находит метод main в классе:

Error: Main method not found in class Test, please define the `main` method as: public static void main(String[] args) or a JavaFX application class must extend javafx.application.Application

Массив String[] args

Main принимает один аргумент массива String. Каждая строка в массиве является аргументом командной строки. Их можно использовать, чтобы влиять на работу программы или передавать в нее информацию во время выполнения. Далее показано, как вывести аргументы командной строки при запуске программы:

public class Test public static void main(String[] args) for(String s : args) System.out.println(s); > > >

Когда скомпилируете программу и потом запустите ее с несколькими аргументами командной строки, разделенными пробелами, аргументы будут выводиться в терминале:

java Test 1 2 3 “Testing the main method”

1 2 3 Testing the main method

Заключение

В этой статье мы подробно остановились на каждом компоненте метода main в Java.

Почему главный метод в Java статический?

В языке программирования Java существует особый метод, который служит точкой входа в программу. Он называется main . Если вы когда-либо писали программу на Java, то наверняка знакомы с его сигнатурой:

public static void main(String[] args) < // код программы >

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

В Java классы являются основой объектно-ориентированного программирования. Классы определяют объекты, их свойства и методы. Но методы и свойства класса могут быть не только общими для всех объектов этого класса, но и относиться к самому классу. Такие методы и свойства называются статическими.

public class MyClass < static int staticVar; static void staticMethod() < // код метода >>

Статические методы и свойства принадлежат классу, а не отдельному объекту. Они могут быть вызваны без создания экземпляра класса.

MyClass.staticMethod();

Теперь давайте вернемся к методу main . Когда вы запускаете программу на Java, виртуальная машина Java (JVM) не создает экземпляр класса, в котором находится метод main . Она просто ищет этот метод и запускает его. Если бы метод main не был статическим, JVM было бы необходимо создать экземпляр класса, прежде чем вызвать метод main , и это создало бы дополнительные сложности.

Таким образом, метод main в Java является статическим, чтобы обеспечить простоту запуска программы. Это позволяет JVM вызвать метод main без необходимости создавать экземпляр класса.

Урок 14. Метод public static void main

В этой статье из моего курса Java я буду обсуждать метод public static void main (String[] args). До этого момента в серии мы запускали наш код только через фреймворк JUnit. Это здравая, методологическая практика, однако она отличается от того, как наша программа будет работать в производстве. Теперь давайте рассмотрим, как наш код будет работать вне среды разработки.

public static void main

Изначально код, который вы пишете в компьютерной программе, — это просто статический текст, пассивно лежащий в файле. Для выполнения кода среда выполнения Java (JRE) отвечает за загрузку скомпилированной программы и запуск ее запуска. Для выполнения кода JRE нужна точка входа. При запуске класса Java из командной строки точкой входа, которую ищет JRE, является следующий метод:

public static void main (String[] args) < /* * JRE начинается с выполнения любого кода здесь */ >

Давайте рассмотрим каждую часть метода в деталях:

  • public — позволяет вызывать метод из-за пределов класса.
  • static — позволяет вызывать метод без создания экземпляра класса.
  • void — не возвращает значения.
  • main () — чтобы выполнить вашу программу, Java будет специально искать метод с именем «main».
  • String [] args — вы можете вызвать свою программу с несколькими аргументами. Ваша программа может получить доступ к этим аргументам из этого массива.
public static void main(String[] arguments) < /* * JRE начинается с выполнения любого кода здесь */ >

Оба кода распознаются JRE. Кроме того, одна вещь о главном методе, который вы можете найти интересным, заключается в том, что вам даже не нужно использовать массив – вы можете заменить массив параметром переменной длины:

ublic static void main(String. arguments) < /* * JRE начинается с выполнения любого кода здесь */ >

Входной параметр, показанный здесь похож на более гибкую версию массива – если вы непосредственно вызываете этот метод, например из теста, он имеет преимущество в принятии переменного числа строковых аргументов, например main(“BMW”, “Porsche”, “Mercedes”), без необходимости создавать массив заранее. Честно говоря, я никогда не использую такой параметр для основного метода, но я думаю, что это хорошая деталь, чтобы знать и хвастаться ;-).

Статический основной метод, который мы используем в качестве точки доступа, очень специфичен. Если вы измените его сверх того, что я обсуждал, он не будет работать так, как вы намереваетесь. Если вы хотите свести своих коллег с ума ; -), вы можете отклониться от этого шаблона, например, сделав метод int вместо void, как показано ниже:

public int main(String[] arguments)

Это код создаст метод с именем main, но он не будет распознан как «основной» метод, и поэтому программа не сможет работать, используя этот метод в качестве отправной точки.

Примеры кода

Давайте создадим класс calledCarSelector и добавим к нему метод main. Он выводит каждый из аргументов командной строки обратно на консоль:

public class CarSelector < public static void main(String[] arguments)< for (String argument: arguments) < System.out.println(“processing car:“ + argument); >>

С помощью основного метода мы можем выполнить этот код без использования тест для вызова, как мы делали до текущего момента.

Компиляция c помощью командной строки

Чтобы запустить нашу программу из командной строки, мы должны сначала перейти в корневую папку нашего исходного кода. В нашем случае это src/main/ java. Кроме того, это структура папок по умолчанию для “Maven», инструмента управления сборкой, который я выделил ранее, когда говорил об инструментах Java.

Для компиляции кода мы вводим:

javac ru/upread/javacourse/car/CarSelector.java

Это создаст файл под названием CarSelector.класс в той же папке, что и CarSelector.java, и мы, наконец, можем выполнить нашу программу:

java ru/upread/javacourse/car/CarSelector

Как вы можете видеть, вызов нашего класса без каких-либо аргументов на самом деле ничего не делает. Так что давайте добавим несколько аргументов:

java ru/upread/javacourse/car/CarSelector BMW Porsche Mercedes processing car: BMW processing car: Porsche processing car: Mercedes

Ура! Мы успешно выполнили нашу собственную программу с консоли!

Запуск программы с помощью IntelliJ IDEA

Чтобы запустить нашу программу из IntelliJ IDEA, мы просто щелкаем правой кнопкой мыши метод и выбираем » Run ‘CarSelector.main’ » из контекстного меню.

Если мы изменим сигнатуру метода main(), то запустим CarSelector.команда main исчезнет из контекстного меню, так как у нас больше не будет действительной точки входа. Однако, когда мы запускаем его, ничего не печатается. Это происходит потому, что никто не передает методу main() никаких аргументов. Для этого в IDE: в меню «Run“ выберите ”edit configurations…. “, а во вкладке ”конфигурация“ добавьте разделенные пробелами строки в ” Program Parameters».

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

Комментарий

Если вы закончили еще один курс Java до этого, или даже если это ваш первый курс, вы можете задаться вопросом, почему я отложил введение метода main() до этого относительно продвинутого этапа в курсе. Я сделал это по нескольким причинам. Во-первых, я считаю, что важно дать вам инструменты, чтобы полностью понять что-то, прежде чем я представлю его. Если бы вы не знали, что такое public static void, или не знали, что такое массив, было бы нечестно учить вас этому. Теперь, когда у вас есть некоторые знания обо всех этих вещах, вы можете начать полностью понимать, как работает этот метод.

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

Наконец, вам редко придется писать основной метод самостоятельно (если вы не будете программировать в одиночку). Для каждой программы (любого размера) существует только один основной метод, и к тому времени, когда вы присоединились к проекту, он, вероятно, уже был написан кем-то другим.

Автор этого материала — я — Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML — то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

статьи IT, уроки по java, java, методы

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *