Как найти метод main java

Программа Java – это последовательность инструкций, которые выполняются в определенном порядке. Поскольку инструкции выполняются в определенном порядке, Java-программа имеет начало и конец.

Для выполнения вашей программы вам необходимо указать виртуальной машине, с чего начать выполнение программы. Все инструкции(код) должны находиться внутри класса. Класс – это способ группировки данных и инструкций, которые принадлежат друг другу. Таким образом, класс может содержать как переменные, так и методы. Переменная может содержать данные, а метод группирует набор операций над данными(инструкции). Не так страшно, если вы еще не до конца поняли это. Начнем разбираться.

Объявление простого класса без каких-либо переменных, методов или любых других инструкций выглядит следующим образом:

public class MyClass {

}

Этот код Java должен находиться в файле с тем же именем, что и у класса, и заканчиваться суффиксом файла .java. В частности, имя файла должно быть MyClass.java. Как только файл находится в файле, соответствующем его имени класса и оканчивающемся на .java, вы можете скомпилировать его с помощью компилятора из Java SDK или изнутри вашей Java IDE(что гораздо проще).

Рекомендуется размещать свой класс в пакете Java. Пакет Java – это просто каталог в вашей файловой системе, который может содержать один или несколько файлов. Пакеты могут быть вложенными, как каталоги.

Например, вы можете создать пакет с именем myjavacode, который будет соответствовать каталогу на вашем жестком диске с именем myjavacode.

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

package myjavacode;

public class MyClass {

}

Примечание. Файл MyClass.java должен теперь находиться в каталоге myjavacode и содержать объявление пакета package myjavacode; Недостаточно, чтобы файл находился в правильном каталоге. Также недостаточно просто иметь объявление пакета внутри файла. Оба требования должны быть выполнены.

main() метод

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

package myjavacode;

public class MyClass {

    public static void main(String[] args) {

    }
}

Три ключевых слова public, static и void имеют особое значение. Просто помните, что для объявления метода main() нужны эти три ключевых слова.

После трех ключевых слов у вас есть имя метода. Напомним, что метод – это набор инструкций, которые могут быть выполнены, как если бы они были одной операцией. Вызывая(выполняя) метод, вы выполняете все инструкции внутри этого метода.

После имени метода сначала ставится левая скобка, а затем список параметров. Параметры – это переменные(данные / значения), которые мы можем передать методу, который может использоваться инструкциями в методе для настройки его поведения. Основной метод всегда должен принимать массив объектов String. Вы объявляете массив объектов String следующим образом:

String[] stringArray

Расскажу о том, что такое String или что такое массив в следующих уроках. Не имеет значения, какое имя вы даете параметру. Ранее в примере с методом main() я вызывал параметр аргумента массива String, а во втором – строковый массив. Вы можете выбрать имя любое.

После списка параметров метода следует сначала левая фигурная скобка({), затем некоторое пустое пространство, а затем правая фигурная скобка(}). Внутри фигурных скобок инструкции, которые должны выполняться при выполнении основного метода. В приведенном выше примере нет никаких инструкций для выполнения. Метод пуст.

Давайте вставим одну инструкцию в основное тело метода. Вот пример:

package myjavacode;

public class MyClass {

    public static void main(String[] args) {
        System.out.println("Hello World, Java Program");
    }
}

Теперь основной метод содержит эту единственную инструкцию:

System.out.println("Hello World, Java Program");

Эта инструкция выведет текст Hello World, Java Program. Если вы запустите свою программу из командной строки, вы увидите вывод в консоли командной строки. Если вы запускаете из IDE, IDE обычно перехватывает весь вывод на консоль и делает его видимым для вас где-то внутри IDE.

Запуск метода main()

Когда вы запускаете программу, вы обычно делаете это через командную строку(консоль). Вы вызываете команду, которая поставляется вместе с JRE, и указываете, какой класс выполнять и какие аргументы передавать методу main(). Затем Java-приложение выполняется внутри JVM. Вот диаграмма, иллюстрирующая это:

A command line executing the java command, which in turn executes a Java main program.

Вот пример командной строки:

java -cp classes myjavacode.MyClass
  • Первая часть этой команды запускает JVM. В некоторых случаях вам может потребоваться указать полный путь к папке, в которой находится команда на вашем компьютере(обычно внутри подкаталога bin каталога установки Java).
  • Второй и третий аргументы(классы -cp) сообщают JVM, в каком каталоге находятся скомпилированные классы. В этом случае скомпилированные классы расположены в каталоге с именем classes.
  • Четвертый аргумент – это имя класса Java, который должна выполнить JVM. Обратите внимание, что имя класса также содержит имя пакета, в котором находится класс(«полное имя класса»).

Передача аргументов

Вы можете передавать аргументы из командной строки в метод main().

java -cp classes myjavacode.MyClass Hello World

Когда JVM выполняет метод main() myjavacode.MyClass, массив String, передаваемый в качестве параметра методу main(), будет содержать две строки: «Hello» и «World».

Метод может получить доступ к аргументам из командной строки следующим образом:

package myjavacode;

public class MyClass {

    public static void main(String[] args) {
        System.out.println( args[0] );
        System.out.println( args[1] );
    }
}

Обратите внимание на ссылки на элемент 0 и элемент 1 в массиве args(args [0] и args [1]). args [0] будет содержать строку(текст) Hello, а args [1] будет содержать мир строки.

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

Этой статьей мы начинаем цикл публикаций для абсолютных новичков в Java. В последующих материалах будут рассмотрены, ко всему прочему, такие темы, как работа с Git, GitHub, командной строкой и многое другое — мы разберем весь набор инструментов и тем, необходимый начинающему Java-джентльмену.

Чтобы написать свою первую программу, требуется не так много усилий. При этом даже можно не устанавливать никакие приложения: ни среду разработки, ни текстовый редактор, ни даже Java — ничего!

Чтобы познакомиться с языком, достаточно открыть любой онлайн-редактор кода, поддерживающий Java. Пишем в гугле java compiler online и выбираем понравившийся. Я остановлюсь на этом: он простой, выглядит хорошо и обладает всеми необходимыми на данном этапе возможностями.

В последующих статьях мы будем использовать для написания кода текстовый редактор Sublime Text, а затем окончательно перейдем на профессиональную среду разработки Intellij IDEA.

Откройте онлайн-редактор и удалите все, что там написано. Затем наберите в нем в точности, включая все пробелы и отступы, следующие строки кода:


public class MyFirstApp {	
    public static void main(String[] args) {
        System.out.println("Write once, run anywhere");
    }
}

Переименуйте имя файла в MyFirstApp.java.

Для запуска программы нажмите Run.

Если все сделано верно, то в консоли отобразится текст: Write once, run anywhere. Переводится, как «Написано однажды, работает везде» — это девиз Java.

Если в коде есть какие-то проблемы, то выведется ошибка. Для ее устранения нужно еще раз внимательно сверить свой код с предложенным выше.

А теперь попробуем разобраться с самой программой.

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

Удалим лишний код программы, чтобы он не отвлекал. Будем добавлять его по мере необходимости.


public class MyFirstApp {	

}

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

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

В строке 1 и 3 используются фигурные скобки, открывающаяся { и закрывающаяся }, идущие всегда парой. Они являются ограничителями, показывающими, где начинается и заканчивается класс. Все, что находится внутри этих скобок, называется телом класса.

В некоторых языках программирования { ставится на новой строке, а не на той, где объявляется класс или другие конструкции языка.


public class MyFirstApp
{	
    public static void main(String[] args)
    {
        System.out.println("Write once, run anywhere");
    }
}

Никогда так не пишите, даже если увидите такой стиль в суперпопулярных книжках от именитых программистов. Дело в том, что все эти люди когда-то давно писали на языке С и С++ и переняли из них привычку ставить скобки в их стиле. Так исторически сложилось, а переучиваться они не видят смысла. Но вам нужно писать правильно, как принято в современном Java-мире!

Рассмотрим строку с объявлением класса чуть подробнее. Она состоит из ряда слов, идущих последовательно в определенном порядке.

public — модификатор доступа, делающий данный класс публичным, общедоступным — мы его ни от кого не прячем.

Да, в Java одни классы можно прятать от других классов, библиотек и т. д. Зачем это делать, сейчас сложно объяснить, т. к. еще не хватает знаний. Но в качестве примера можно привести ситуацию, когда Гарри Поттер надел на себя мантию-невидимку и не хотел, чтобы Северус Снегг видел его, а значит, заговорил с ним, попросил что-то, отправил куда-то и т. д. Также и мы можем не хотеть, чтобы один класс мог видеть и использовать другой класс.

class — ключевое слово, сообщающее о том, что данная конструкция описывает класс, а не что-то другое.

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

Наверное, вы обратили внимание на способ написания имени класса MyFirstApp, когда все слова начинаются с большой буквы. Это делает их похожими на верблюжьи горбы. Поэтому данный способ называется CamelCase. Существуют и другие, но в Java используется именно этот.

public и class являются зарезервированными (ключевыми) словами Java. Таких слов много. Со временем вы будете знать их все.

Также стоит помнить, что имя файла должно в точности повторять, включая первую большую букву, имя класса, описанного в нем. В нашем случае и класс и файл имеют имя MyFirstApp. Это очень удобно, потому что не нужно открывать файл, чтобы узнать, какой класс в нем описан. Достаточно посмотреть на имя файла.

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

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

Подведем промежуточный итог, выделив ряд правил, которые мы прошли (их нужно запомнить):

  • для объявления класса необходимо использовать запись вида public class ИмяКласса
  • для обозначения начала и конца объявления класса используются фигурные скобки { }, которые всегда идут парой
  • имя класса принято начинать с большой буквы
  • при именовании класса необходимо использовать CamelCase
  • имя файла и класса должны совпадать
  • файл с Java-кодом должен иметь расширение .java

Границы программы заданы, класс объявлен. Далее реализуем в нем какую-то функциональность. Для этого нужно объявить (создать) метод.


public class MyFirstApp {	
    public static void main(String[] args) {

    }
}

В других языках эта конструкция может называться процедурой или функцией. В Java — называется методом. Это блок кода, который выполняет какую-то полезную работу. Это функциональная возможность класса, т. е. то, что он умеет делать.

Метод, как и класс, записывается по определенным правилам и тоже содержит ряд ключевых слов и фигурные скобки, обозначающие его границы.

Метод main — непростой метод: он отвечает за запуск программы, и его внешний вид строго декларирован (утвержден).

Разберем, из чего состоит объявление метода main.

public — так же, как и для класса сообщает о том, что метод является публичным, общедоступным (да, методы тоже можно прятать или оставлять открытыми). В данном случае мы его не скрываем от JVM (Java Virtual Machine — виртуальная машина Java, в которой запускаются и работают Java-программы), чтобы она могла выполнить его независимо от того, где находится класс с этим методом или сама JVM.

static — сейчас понять назначение этого слова будет тяжело, т. к. чтобы про него рассказать, требуется разобрать дополнительные темы, которые мы еще не проходили. На данном этапе достаточно знать, что модификатор static позволяет JVM запускать метод main без дополнительных действий с ее стороны.

В качестве аналогии можно привести кота, у которого есть кормушка с кнопкой. Чтобы начать использовать кормушку, коту не нужно ее строить. Он жмет кнопку и получает корм. В нашем случае виртуальная машина просто запускает метод main, не создавая экземпляр класса, в котором он находится (примите эту информацию как есть. В последующих статьях мы подробнее раскроем эту тему).

void — указывает на тип возвращаемого значения. Каждый метод внутри себя выполняет какую-то деятельность. Результатом этой работы может быть какое-то значение. Например, результатом работы метода, который складывает два числа 2 + 2 является новое число 4. Это значение он может передать дальше в программу, либо оно навсегда останется в нем.

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

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

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

main — имя метода. Позволяет отличать один метод от другого, т. к. класс может содержать огромное их количество. В нашем случае метод называется main, т. е. «главный», «основной». Имена методов в Java принято записывать с маленькой буквы.

Имена методов могут состоять из нескольких слов, например, findCat, deleteAllNumbers, receiveKeyIfResumeExist и т. д. В этом случае тоже используют camelCase, но первое слово в имени начинается с маленькой буквы.

() — открывающаяся и закрывающаяся круглая скобка. Они выполняют две функции: сообщают, что перед нами метод; а также могут внутри себя содержать описание принимаемых аргументов.

String[] args — принимаемые методом аргументы. В данном случае метод main принимает в качестве аргумента массив строк, который называется args. Чтобы представить, что такое массив, подумайте о коробке конфет или о лотке для яиц. Это все массивы, где хранятся элементы одного типа: либо только конфеты, либо только яйца. С массивами мы детально разберемся в другой статье.

Тут можно привести пример со стиральной машиной, которую перед запуском можно настроить на нужный режим стирки. Нажимая все ее кнопки, вы передаете в нее аргументы с определенными значениями: время стирки, нужен ли отжим, тип материала и т. д.

{ } — открывающаяся и закрывающаяся фигурная скобка. Задают границы метода. Все, что находится внутри них, называется телом метода.

Как я написал выше, main — это не простой метод. Это — самый главный метод. Его еще называют точкой входа в программу. При запуске программы, в первую очередь, запускается именно он. Внешний вид метода строго декларирован и прописан в спецификации языка. В противном случае JVM не сможет найти его, и программа не запустится

Спецификация языка — это технический pdf-документ с описанием синтаксиса и семантики языка.

На данном этапе вам нужно просто запомнить, как выглядит метод main. Представьте, что это магическое заклинание, которое звучит как public static void main(String[] args) — повторяйте его, чтобы запомнить.

Снова подведем промежуточный итог, выделив ряд правил, которые мы прошли:

  • для объявления метода main необходимо использовать запись вида public static void main(String[] args)
  • для обозначения начала и конца метода используются фигурные скобки { }, которые всегда идут парой
  • имя метода принято начинать с маленькой буквы
  • при именовании метода, если он состоит из более чем одного слова, тоже используют camelCase, но первое слово в имени начинается с маленькой буквы

4. Вывод текста на консоль

Нам осталось разобраться с последней строкой кода, которая позволяет вывести на экран текст Write once, run anywhere.


public class MyFirstApp {	
    public static void main(String[] args) {
        System.out.println("Write once, run anywhere");
    }
}

Это еще одно заклинание на языке Java, которое условно можно разбить на следующие части:

  • System.out.println — отвечает за вывод текста. Просто запомните, как это пишется
  • ( ) — парные круглые скобки
  • «Write once, run anywhere» — текст, обрамленный с двух сторон кавычками, который будет отображен при запуске программы
  • точка с запятой — сообщает о том, что строка с кодом закончилась

1) Ранее было написано, что имя класса и имя файла должны совпадать. Давайте попробуем нарушить это правило и посмотрим на последствия.

Изменим имя файла MyFirstApp.java на MyApp.java, и запустим программу. Отобразится ошибка:

Она означает, что в строке 1 файла MyApp.java объявляется публичный класс с именем MyFirstApp, а значит и находиться он должен в файле с таким же именем.

2) Теперь нарушим еще одно правило, написав имя класса и файла с маленькой буквы, назвав их myFirstApp. Запустив программу, видим, что отобразилось сообщение Write once, run anywhere.

Можно сделать вывод, что писать имя файла и класса с большой буквы является лишь договоренностью всех программистов друг с другом. Это сделано для того, чтобы в коде не путать имена переменных (начинаются с маленькой буквы. О них мы поговорим в другой статье) с именами классов.

3) Попробуем изменить имя метода main, например, на Main. Запустив программу, увидим следующую ошибку:

JVM не смогла запустить программу т. к. не нашла метод main (с маленькой буквы). О чем и свидетельствует ошибка Error: main method not found.

4) Вернем методу его первоначальное имя, но удалим слова public static и снова запустим. Возникнет та же самая ошибка, что и в предыдущем пункте, связанная с тем, что при запуске программы не был найден метод main, записанный по всем правилам.

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

Оцените статью, если она вам понравилась!

23 ноября, 2022 11:57 дп
714 views
| Комментариев нет

Development, 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 не может его найти:

javac Test.java 

java Test

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, при компиляции и запуске программы возникает следующая ошибка:

javac Test.java 

java Test

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:

javac Test.java

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 в классе:

javac Test.java 

java Test

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);
     }
    }
}

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

javac Test.java 

java Test 1 2 3 “Testing the main method”

1
2
3
Testing the main method

Заключение

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

Читайте также: Как написать свою первую программу на Java

Tags: Java

In Java programs, the point from where the program starts its execution or simply the entry point of Java programs is the main() method. Hence, it is one of the most important methods of Java, and having a proper understanding of it is very important.

The Java compiler or JVM looks for the main method when it starts executing a Java program. The signature of the main method needs to be in a specific way for the JVM to recognize that method as its entry point. If we change the signature of the method, the program compiles but does not execute.

The execution of the Java program, the java.exe is called. The Java.exe in turn makes Java Native Interface or JNI calls, and they load the JVM. The java.exe parses the command line, generates a new String array, and invokes the main() method. A daemon thread is attached to the main method, and this thread gets destroyed only when the Java program stops execution.

Java main() Method

Syntax of main() Method

The most common in defining the main() method is shown in the below example.

Java

class GeeksforGeeks {

    public static void main(String[] args)

    {

        System.out.println("I am a Geek");

    }

}

Every word in the public static void main statement has got a meaning in the JVM that is described below:

1. Public 

It is an Access modifier, which specifies from where and who can access the method. Making the main() method public makes it globally available. It is made public so that JVM can invoke it from outside the class as it is not present in the current class.

Java

class GeeksforGeeks {

    private static void main(String[] args)

    {

        System.out.println("I am a Geek");

    }

}

Output

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

2. Static

It is a keyword that is when associated with a method, making it a class-related method. The main() method is static so that JVM can invoke it without instantiating the class. This also saves the unnecessary wastage of memory which would have been used by the object declared only for calling the main() method by the JVM.

Java

class GeeksforGeeks {

    public void main(String[] args)

    {

        System.out.println("I am a Geek");

    }

}

Output

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

3. Void 

It is a keyword and is used to specify that a method doesn’t return anything. As the main() method doesn’t return anything, its return type is void. As soon as the main() method terminates, the java program terminates too. Hence, it doesn’t make any sense to return from the main() method as JVM can’t do anything with the return value of it.

Java

class GeeksforGeeks {

    public static int main(String[] args)

    {

        System.out.println("I am a Geek");

        return 1;

    }

}

Output

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

4. main 

It is the name of the Java main method. It is the identifier that the JVM looks for as the starting point of the java program. It’s not a keyword.

Java

class GeeksforGeeks {

    public static void myMain(String[] args)

    {

        System.out.println("I am a Geek");

    }

}

Output

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

5. String[] args 

It stores Java command-line arguments and is an array of type java.lang.String class. Here, the name of the String array is args but it is not fixed and the user can use any name in place of it. 

Java

class GeeksforGeeks {

    public static void main(String[] args)

    {

        for (String elem : args)

            System.out.println(elem);

    }

}

Output

1
2
3 

Apart from the above-mentioned signature of main, you could use public static void main(String args[]) or public static void main(String… args) to call the main function in Java. The main method is called if its formal parameter matches that of an array of Strings.

FAQs on Java main() Method

Q1. Can the main method be int? If not, why?

Ans:

Java

class GeeksforGeeks {

public static int main(String[] args)

    {

        System.out.println("GeeksforGeeks");

    }

}

Output

prg1.java:6: error: missing return statement
   }
   ^
1 error

Java does not return int implicitly, even if we declare the return type of main as int. We will get a compile-time error

Java

class GeeksforGeeks {

   public static int main(String[] args) {

       System.out.println("GeeksforGeeks");

       return 0;

   }

}

Output

Error: Main method must return a value of type void in class GeeksforGeeks, please  
define the main method as:
  public static void main(String[] args)

Now, even if we do return 0 or an integer explicitly ourselves, from int main. We get a run time error.

Explanation of the above programs: 

The C and C++ programs which return int from main are processes of Operating System. The int value returned from main in C and C++ is exit code or exit status. The exit code of the C or C++ program illustrates, why the program was terminated. Exit code 0 means successful termination. However, the non-zero exit status indicates an error. 

For Example exit code 1 depicts Miscellaneous errors, such as “divide by zero”.

The parent process of any child process keeps waiting for the exit status of the child. And after receiving the exit status of the child, cleans up the child process from the process table and free the resources allocated to it. This is why it becomes mandatory for C and C++ programs(which are processes of OS) to pass their exit status from the main explicitly or implicitly.

However, the Java program runs as a ‘main thread’ in JVM. The Java program is not even a process of Operating System directly. There is no direct interaction between the Java program and Operating System. There is no direct allocation of resources to the Java program directly, or the Java program does not occupy any place in the process table. Whom should it return an exit status to, then? This is why the main method of Java is designed not to return an int or exit status.

But JVM is a process of an operating system, and JVM can be terminated with a certain exit status. With help of java.lang.Runtime.exit(int status) or System.exit(int status).

Q2. Can we execute a Java program without the main method?

Ans:

Yes, we can execute a Java program without a main method by using a static block.

A static block in Java is a group of statements that gets executed only once when the class is loaded into the memory by ClassLoader, It is also known as a static initialization block, and it goes into the stack memory.

class StaticBlock {
    static
    {
        System.out.println(
            "This class can be executed without main");
        System.exit(0);
    }
}

Q3. Can we declare the main() method without String[] args?

Ans:

Yes, we can declare the main() method without String[] args. Although it will generate an error message if we directly try to execute the main method inside the driver class as done in the below example.

Java

public class GFG{

    public static void main() {

        System.out.println("Hello, world!");

    }

}

Output

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

Below is the correct method to write a program without String args[].

Java

import java.io.*;

import javafx.application.Application;

abstract class GFG

    extends javafx.application.Application {

    static

    {

        System.out.println("Hello, world!");

        System.exit(0);

    }

}

Output

Hello, world!

Last Updated :
20 May, 2023

Like Article

Save Article

I’m getting Java code generated for me from an application.
I took the JRE and extracted all the files into a new directory.
There is a META-INF folder that has a MANIFEST.MF without any main method.

Witin this JRE is the class of the code I’m interested in however when I CMD the following…

java Steve.class

I get this error…

Could not load for find Main Class Steve.class. 

I’m assuming that somewhere in all these class files there is a Main class but how do I search all these documents to find it? Is there an application?

Thanks!

Andrew Thompson's user avatar

asked Jan 25, 2012 at 8:31

remove me's user avatar

1

You don’t need the .class suffix when invoking a Java program. Do it like this:

java Steve

To work out which class has a main method, you can use javap (Java Class File Disassembler) on each class file. For example:

$ javap Foo
Compiled from "Foo.java"
public class Foo extends java.lang.Object{
    public Foo();
    public static void main(java.lang.String[]);
}

answered Jan 25, 2012 at 8:34

dogbane's user avatar

dogbanedogbane

265k75 gold badges395 silver badges413 bronze badges

First: every class that exposes this method signature:

public static void main(String[] args) { }

could be a main class launchable from the JVM and eligible to be put in the manifest to enable shell execution.

Second: when you launch a class in a JRE you must specify the fully qualified name of the class; for example if Steve.class file is in a tree structure such as com/mycompany/app, starting from the root of your application where the MANIFEST directory is, you should launch it, from the root directory, typing:

java com.mycompany.app.Steve

So if Steve exposes a main method and if you can correctly point to it from the root, you can launch it.

answered Jan 25, 2012 at 8:39

Andrea Colleoni's user avatar

Andrea ColleoniAndrea Colleoni

5,8813 gold badges30 silver badges49 bronze badges

3

Понравилась статья? Поделить с друзьями:
  • Как найти электронный дневник для школы
  • Как найти вероятность обратного события
  • Как найти частоту колебания нити
  • Как составить типовой контракт
  • Как найти поставщиков для таобао