- Can a Java class have multiple main methods?
- Sample code snippet:
- Passing the arguments to the application:
- Java Tutorials
- Can there be more than one main method in a Java Program
- 2 Thoughts on “ Can there be more than one main method in a Java Program ”
- Несколько методов main () в Java
- 10 ответов
- Ещё вопросы
Can a Java class have multiple main methods?
JVM looks for main with these signatures and ignores the other methods with the name main in the class. The sample code snippet is shown below with multiple main methods in a class.
In case you are attending an interview, the same question can be asked differently as: Can we overload the main method?
The answer to the question would be Yes. We can overload the main method. We can create many methods with the same name main. However, as mentioned earlier, only the public static void main(String[] args) method is used for the program execution. The sample program below has different main method signatures.
Sample code snippet:
public class RunConfigurationDemo < public static void main(String. args) < System.out.println(args[0]); >public static void main(String args) < System.out.println(args); >public static void main(int args) < System.out.println(args); >>
Passing the arguments to the application:
We can pass arguments to the Java application as shown in the below steps:
Launch run configurations Run >> Run Configurations
Alternatively, right-click on the program Run as >> Run configurations…
Choose the Java application >> Arguments
We can pass program arguments and VM arguments to the application program.
Java Tutorials
Java Tutorial on this website:
For more information on Java, visit the official website :
Can there be more than one main method in a Java Program
Yes, you can have as many main methods as you like. You can have main methods with different signatures from main(String[]) which is called overloading, and the JVM will ignore those main methods.
You can have one public static void main(String[] args) method in each class. Some people use those methods for testing. They can test the operation of each class individually. The JVM will only invoke the public static void main(String[] args) method in the class you name when you write java MyClass.
public class TwoMain < public static void main(String args1[]) < System.out.println("First main"); >public static void main(String args2[]) < System.out.println("Second main"); >>
Those two methods have the same signature. The only way to have two main methods is by having two different classes each with one main method. The name of the class you use to invoke the JVM (e.g. java Class1, java Class2) determines which main method is called.
2 Thoughts on “ Can there be more than one main method in a Java Program ”
No, you can’t. That code is invalid. You can’t override a method with the *same” list of types. Name of parameters doesn’t matter, but parameter’s types must be different. Or count of parameters must be different. You can’t have the same list of parameters types and count on the same class.
You can have one main per class, but no more than one.
No Yo can not define two main method in a Java Program.
public class TwoMain < public static void main1(String[] args) // TODO Auto-generated method stubo System.out.println(” HI First main”); > public static void main2(String[] args) // TODO Auto-generated method stubo System.out.println(” HI First main 2″); > > == error Error: Main method not found in class test.TwoMain, please define the main method as:
public static void main(String[] args)
or a JavaFX application class must extend javafx.application.Application
Несколько методов main () в Java
После того, как программа будет запущена, foo будет создан, и в ней будет другой общедоступный главный метод. Это вызовет какие-либо ошибки?
10 ответов
Это не вызовет ошибок. Просто потому, что вы инициализируете объект, не означает, что основной метод выполняется. Java сначала изначально будет вызывать основной метод переданного ему класса, например >java TestClass Однако, сделав что-то вроде:
public class TestClass < public TestClass() < //This gets executed when you create an instance of TestClass main(null); >public static void main (String[] args) < TestClass foo = new TestClass(); >>
Это вызовет StackOverflowError , потому что вы явно вызываете основной метод TestClass, который снова вызовет основной метод, и снова, и снова, и. Если вы сомневаетесь, просто проверьте это: -)
Основной метод — static, что означает, что он принадлежит классу, а не объекту. Таким образом, у объекта вообще не будет другого основного метода.
Вы можете вызвать основной метод для экземпляров объекта, но если вы это сделаете, это будет просто другим способом вызова TestClass.main() (и многие из них, включая меня, нахмурились, чтобы вызвать статический метод на экземпляр объекта в любом случае.)
Если вы ссылаетесь на несколько основных методов в одной и той же программе, то это тоже не проблема. Основной класс просто указан и его основной метод выполняется для запуска программы (в случае файла jar это атрибут основного класса в файле манифеста.)
У него не будет дополнительного метода main , так как main есть static . Так это один раз в классе.
Если у вас есть несколько методов main в вашем проекте, вы укажете, какой из них запускаться при запуске приложения.
Это прекрасно. Наличие нескольких методов main не вызывает никаких проблем. При первом запуске Java-программы выполнение начинается с некоторой функции под названием main в классе, указанном пользователем или файлом .jar. После запуска программы все остальные функции, называемые main , по существу игнорируются или рассматриваются как другие функции.
Я думаю, что OP спрашивает о том, создаются ли основные методы заново каждый раз, когда создается экземпляр объекта этого класса, вместо того, чтобы иметь несколько объявленных основных методов в одной и той же области видимости.
Я думаю, что это может быть истолковано в любом случае, и полезно иметь оба объяснения. Просто мое мнение, конечно.
Справедливо, я согласен, что оба объяснения в любом случае полезны. Это просто, как я впервые прочитал это 🙂
@James- Джеймс: Да, это правда. Я в основном говорил о том, как main взаимодействует с остальной частью программы, поэтому я не стал вдаваться в подробности.
После поиска Java-класса с несколькими методами main() или простыми словами перегруженные методы main() я привел пример моего собственного. Пожалуйста, посмотрите
public class MultipleMain < public static void main(String args[])< main(1); main('c'); main("MyString"); >public static void main(int i) < System.out.println("Inside Overloaded main()"); >public static void main(char i) < System.out.println("Inside Overloaded main()"); >public static void main(String str)
Я тестировал этот Java-код на JDK 1.7 и работает как прелесть!
Для начала вам понадобится «public static void main (String args [])», а затем вы можете вызвать перегруженные основные методы внутри этого основного, и это должно работать точно.
Любые комментарии и предложения заслуживают высокой оценки. Я просто начинающий Java-разработчик, готовый развивать свои навыки Java.
Я тоже попробовал что-то подобное. Хотя у нас есть несколько основных методов, но основной метод с аргументом (String args []) выполняется первым . Есть ли способ запустить другой основной метод в первую очередь?
@RishabhAgarwal Ваша среда выполнения Java ищет метод main с помощью (String args []), когда загружается ваш класс с методом main. Я не знаю ни о каком механизме, чтобы переопределить это.
Нет, у вас может быть любое количество основных методов в проекте. Поскольку вы указываете, какой из них вы хотите использовать при запуске программы, он не вызывает конфликтов.
если у меня есть несколько основных, как указать, какой из них использовать в первую очередь?
В одном классе может быть только один основной метод, но вы можете вызвать один основной метод для другого явно
class Expmain < public static void main(String[] ar) < System.out.println("main 1"); >> class Expmain1 < public static void main(String[] ar) < System.out.println("main 2"); Expmain.main(ar); >>
Еще один интересный момент для рассмотрения — это случай, когда у вас есть два разных класса в java файле.
Например, у вас есть файл Java с двумя классами:
public class FirstClassMultiply < public static void main (String args[])< System.out.println("Using FirstClassMultiply"); FirstClassMultiply mult = new FirstClassMultiply(); System.out.println("Multiple is :" + mult.multiply(2, 4)); >public static void main (int i) < System.out.println("Using FirstClassMultiply with integer argument"); FirstClassMultiply mult = new FirstClassMultiply(); System.out.println("Multiply is :" + mult.multiply(2, 5)); >int multiply(int a, int b) < return (a * b); >> class SecondClass < public static void main(String args[]) < System.out.println("Using SecondClass"); FirstClassMultiply mult = new FirstClassMultiply(); System.out.println("Multiply is :" + mult.multiply(2, 3)); FirstClassMultiply.main(null); FirstClassMultiply.main(1); >>
Компиляция с помощью javac FirstClassMultiply.java приведет к генерации двух файлов .class , первая из которых — FirstClassMultiply.class , а вторая — SecondClass.class
И для его запуска вам нужно будет сделать это для сгенерированных файлов .class : java FirstClassMultiply и java SecondClass , а не исходного файла файла.
Обратите внимание на несколько дополнительных пунктов:
- Вы можете запустить SecondClass.class , хотя класс не был общедоступным в исходном файле!
- FirstClassMultiply перегрузка основного метода of полностью тонкий, но только точка входа для вашей проги будет основным методом с аргументом String args[] .
Это все о механизме выполнения JVM. Помните, вы пишете >java com.abc.MainClass в командной строке cmd.
Это объясняет все. Если главный метод не найден здесь, он выдает время выполнения. Ошибка: главный метод не найден в классе MainClass. Теперь, если основной метод найден здесь, он действует как первая точка, когда счетчики программ должны сопоставлять и начинать выполнение инструкций. Загруженные классы загружаются, тогда называемые методы могут вызываться с использованием экземпляров, созданных внутри. Итак, основной класс специфичен, хотя один класс может иметь только один основной метод. Обратите внимание: основная подпись метода никогда не изменяется. Вы можете иметь два перегруженных основных метода в одном классе, например
public static void main (String [] args) <>
public static void main() <>//перегружен в том же классе.
При связывании с Static исходный основной файл решается и идентифицируется механизмом выполнения.
когда вы запускаете свой Java-класс, он всегда будет искать подпись public static void main (String args []) в классе. Предположим, что если вы вызываете аргумент командной строки, он будет искать метод Signature в классе и не будет вызывать другого до тех пор, пока u не будет явно inoke его именем класса.
class MainMethod1 < public static void main(String[] ags)< System.out.println("Hi main 1"); testig2 y = new testig2(); //in this case MainMethod1 is invoked/. // String[] a = new String[10]; // testig2.main(a); >> class MainMethod2 < public static void main(String[] ags)< System.out.println("Hi main 2"); >>
Но когда вы попробуете то же самое из eclipse, он попросит компилировать класс. Средство MainMethod1 или Mainmethod2. Поэтому, если te class имеет точную подпись, они могут использоваться как отдельная точка входа для запуска приложения. На ваш вопрос: если вы удалили подпись, как вы делали выше, изменив аргумент, если основной метод. Он будет действовать как обычный метод.
Ещё вопросы
- 1 Проблема с WebView на сайте Youtube в Android?
- 0 Как получить данные с помощью соединения в MySQL
- 1 Как читать китайский текстовый файл (Python)
- 0 Используйте изображение в кредитах Highcharts
- 1 Рассчитать различия между элементами в группе
- 1 D3JS — Могу ли я сделать форсированный граф с отдельными узлами и как?
- 1 Как загрузить открытый набор данных s3 в коллаборацию Google?
- 1 ngModel не может правильно определить изменения массива
- 1 Удалить в Java?
- 1 Собрать модель java.lang.Void для корневого проекта?
- 1 Регулярное выражение Javascript для соответствия всем символам & в тексте, игнорируя такие кодировки, как & # 41 ;, & nbsp; и т.д
- 1 Поток выполнения веб-приложения?
- 0 используя jQuery, чтобы снять все флажки, а затем проверить установленный
- 0 Передача вектора в функцию
- 0 инициализировать элементы структуры, используя указатель в C ++
- 1 я могу заменить regExp другим regExp?
- 0 Настройка мета описания сайта
- 0 Почему я создал потенциальный блуждающий указатель при удалении здесь в деструкторе?
- 0 хранение глобальных переменных при уничтожении или выгрузке
- 1 Объект является нулевым, так как второй вызов метода
- 1 Невозможно заставить Firebase работать без сборки Gradle: отсутствует google_app_id. Аналитика Firebase отключена
- 0 Доступ к элементу массива внутри объекта stdClass
- 0 MySQL, используя сумму для столбца, чтобы получить общую сумму для каждой группы
- 0 Отображать окно на странице HTML, используя внешний Javascript?
- 0 Как получить конкретные даты недели между двумя выбранными датами месяца
- 0 Ошибка Boost Thread C2064 при попытке компиляции
- 0 использовать mysql для диагностики в другой процедуре
- 0 Установить переменные по умолчанию в классе
- 0 Использование JQuery для редактирования атрибутов данных на определенных элементах DOM
- 1 FolderBrowserDialog с MVC 4?
- 1 Вставка карты в базу данных с использованием jdbctemplate
- 0 svg tag скрывает что-либо после html тела
- 1 Как навсегда разместить JFrame над другим?
- 0 Счетчик кликов в Javascript
- 0 Пользовательская директива для заполнения выпадающего списка
- 1 Сортировка вставок со строками
- 0 Использование CASE для нескольких условий в запросе MySQL
- 0 jQuery — добавление CSS3-анимации в div с использованием jQuery.
- 0 Сосредоточиться на выбранной дате после отправки формы в функции onSelect
- 0 настроить веб-страницу под любое устройство
- 0 Как изменить значение метки после нажатия на HREF с JavaScript?
- 0 Как независимые разработчики ПО скрывают свой объектный код, когда вы можете декомпилировать?
- 1 Запретить RecyclerView глотать сенсорные события без создания пользовательской ViewGroup
- 1 Категориальные переменные в несколько столбцов
- 0 jQuery Week Calendar без перекрывающихся событий
- 1 Какие версии Android NDK поддерживают 64-разрядные архитектуры?
- 0 Почему $ _POST не распознает определенные загруженные файлы?
- 0 Стандартный источник имплементации библиотеки, у которого не было названий uglified
- 0 Qt: (ошибка) неопределенная ссылка на класс QuaZip (библиотека QuaZIP)
- 1 Как найти приблизительные координаты из четырех разных списков и координат