Могут ли существовать два основных метода в Java-программе?
Могут ли существовать два основных метода в программе Java?
Только по разнице в их аргументах, например:
public static void main(String[] args)
а второй может быть
public static void main(StringSecond[] args)
Если возможно, какой метод будет использоваться в качестве точки входа?
Как определить это? пожалуйста, помогите.
Ответы
Ответ 1
Пока параметры метода (число (или)) различаются, да, они могут. Он называется перегрузкой.
Перегруженные методы различаются по числу и типу аргументов, переданных в метод
public static void main(String[] args)
только основной метод с одиночным String[]
(или) String...
в качестве параметра будет считаться точкой входа для программы.
Ответ 2
Здесь вы можете увидеть, что есть 2 public static void main (String args[])
в одном файле с именем Test.java
(в частности, не использовалось имя файла как одно из двух имен классов), а 2 класса имеют значение по умолчанию спецификатор доступа.
class Sum {
int add(int a, int b) {
return (a+b);
}
public static void main (String args[]) {
System.out.println(" using Sum class");
Sum a = new Sum();
System.out.println("Sum is :" + a.add(5, 10));
}
public static void main (int i) {
System.out.println(" Using Sum class main function with integer argument");
Sum a = new Sum();
System.out.println("Sum is :" + a.add(20, 10));
}
}
class DefClass {
public static void main (String args[]) {
System.out.println(" using DefClass");
Sum a = new Sum();
System.out.println("Sum is :" + a.add(5, 10));
Sum.main(null);
Sum.main(1);
}
}
Когда мы скомпилируем код Test.java, он сгенерирует 2 .class
файла (viz Sum.class
и DefClass.class
), и если мы запустим Test.java, мы не сможем его запустить, так как он не найдет никакого основного класса с имя Test. Вместо этого, если мы делаем java Sum
или java DefClass
, оба будут давать разные выходы, используя разные main()
. Чтобы использовать основной метод класса Sum, мы можем использовать имя класса Sum.main(null)
или Sum.main(1)//Passing integer value in the DefClass main()
.
В области класса мы можем иметь только один public static void main (String args[])
для каждого класса, поскольку статический метод класса принадлежит классу, а не его объектам и вызывается с использованием его имени класса. Даже если мы создадим несколько объектов и назовем их теми же статическими методами, то экземпляр статического метода, к которому будет обращаться этот вызов, будет таким же.
Мы также можем выполнить перегрузку основного метода, передав в главном множестве множество аргументов. Аналогичный пример приведен в приведенном выше коде, но по умолчанию поток управления начинается с public static void main (String args[])
файла класса, который мы вызывали с помощью java classname
. Чтобы вызвать основной метод с другим набором аргументов, мы должны явно вызвать его из других классов.
Ответ 3
В одной программе может быть несколько основных методов. Другие - метод Overloaded.
Этот перегруженный метод отлично работает под одним основным методом.
public class MainMultiple{
public static void main(String args[]){
main(122);
main('f');
main("hello java");
}
public static void main(int i){
System.out.println("Overloaded main()"+i);
}
public static void main(char i){
System.out.println("Overloaded main()"+i);
}
public static void main(String str){
System.out.println("Overloaded main()"+str);
}
}
Ответ 4
Это будет компилируемый код, если StringSecond
- класс. Однако, если по "основному методу" вы подразумеваете вторую точку входа в программу, тогда ответа на ваш вопрос по-прежнему нет. Только первая опция (public static void main(String[] args)
) может быть точкой входа в вашу программу.
Обратите внимание, однако, что если бы вы разместили второй метод main(String[])
в другом классе (но в том же проекте), вы могли бы иметь несколько возможных точек входа в проект, которые вы могли бы выбрать. Но это не может противоречить принципам переопределения или перегрузки.
Также обратите внимание, что одним из источников путаницы в этой области, особенно для вводных программистов, является то, что public static void main(String[] args)
и public static void main(String ... args)
используются как точки входа и рассматриваются как имеющие одну и ту же сигнатуру метода.
Ответ 5
Только public static void main(String[] args)
подсчитывается. Это единственная сигнатура, которая считается истинной main() (как точка ввода программы, я имею в виду).
Ответ 6
В Java вы можете иметь только один public static void main(String[] args)
для каждого класса. Это означает, что , если ваша программа имеет несколько классов, каждый класс может иметь public static void main(String[] args)
. Подробнее см. JLS.
Ответ 7
Подпись основного метода должна быть
public static void main(String[] args)
- Имя параметра может быть любым допустимым именем
- Позиции статических и общедоступных ключевых слов могут быть взаимозаменяемы
- Строковый массив может также использовать синтаксис varargs
Класс может определять несколько методов с именем main.
Подпись этих методов не соответствует сигнатуре основного метода. Эти другие методы с разными сигнатурами не считаются "основным" методом.
Ответ 8
Да, в одной программе может быть два основных(). Например, если у меня есть класс Demo1, как показано ниже. Компиляция этого файла будет генерировать файл Demo1.class. И как только вы запустите это, он будет запускать main() с массивом аргументов String по умолчанию. Он не будет даже нюхать в main() с аргументом int.
class Demo1 {
static int a, b;
public static void main(int args) {
System.out.println("Using Demo1 class Main with int arg");
a =30;
b =40;
System.out.println("Product is: "+a*b);
}
public static void main(String[] args) {
System.out.println("Using Demo1 class Main with string arg");
a =10;
b =20;
System.out.println("Product is: "+a*b);
}
}
Output:
Using Demo1 class Main with string arg
Product is: 200
Но если я добавлю еще один класс с именем Аноним и сохраню файл как Anonym.java. Внутри этого я вызываю класс Demo1 main() [либо аргумент int, либо строковый аргумент one]. После компиляции этот файл Anonym.class генерируется.
class Demo1 {
static int a, b;
public static void main(int args) {
System.out.println("Using Demo1 class Main with int arg");
a =30;
b =40;
System.out.println("Product is: "+a*b);
}
public static void main(String[] args) {
System.out.println("Using Demo1 class Main with string arg");
a =10;
b =20;
System.out.println("Product is: "+a*b);
}
}
class Anonym{
public static void main(String arg[])
{
Demo1.main(1);
Demo1.main(null);
}
}
Output:
Using Demo1 class Main with int arg
Product is: 1200
Using Demo1 class Main with string arg
Product is: 200
Ответ 9
Да, вы можете иметь столько основных методов, сколько захотите. У вас могут быть методы main с разными сигнатурами из main(String[])
который называется перегрузкой, и JVM будет игнорировать эти основные методы.
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");
}
}
Ответ 10
Ответ - нет; существует только один "главный" метод, где "main" означает точку входа, которую вы можете "запустить".
Вы можете кодировать перегруженные версии, как в вашем примере, но они не могут быть "запущены".
Ответ 11
В одной программе может быть несколько основных методов. Но JVM всегда будет вызывать метод main() аргумента String []. Другой метод будет действовать как перегруженный метод. Этот перегруженный метод мы должны вызывать явно.
Ответ 12
возможность двух основных (String [] args) методов в пределах одного и того же объема создает путаницу для JVM. Он не может использовать их как перегруженные методы. Таким образом, сигнатуры в терминах параметров) должны быть разными.
Ответ 13
Следующий код в файле "Locomotive.java" будет скомпилирован и запущен успешно, при этом результаты выполнения, показывающие
2<SPACE>
Как упоминалось выше, правила перегрузки по-прежнему работают для основного метода.
Тем не менее, точка входа - это знаменитый psvm (public static void main (String [] args))
public class Locomotive {
Locomotive() { main("hi");}
public static void main(String[] args) {
System.out.print("2 ");
}
public static void main(String args) {
System.out.print("3 " + args);
}
}
Ответ 14
Да! Любой класс в Java может иметь несколько основных методов. Он называется Overloading (перегруженные методы - это методы с одинаковыми именами, но с разными сигнатурами), но должен быть только один основной метод с такими параметрами: - (String [] args) или (String args [])
Например: -public класс E {
public static void main(String args){
System.out.println("Print A");
}
public static void main(String [] args){
System.out.println("Print B");
}
public static void main(int garbage){
System.out.println("Print C");
}
public static void main(int i){
System.out.println("Print D")
}
}
Результатом вышеупомянутой программы будет "Print B", поскольку только этот метод main содержит правильную сигнатуру метода, идентифицированную компилятором Javac, и он компилирует только это, а остальное оставляет.
Ответ 15
Ответ - да, но вы должны рассмотреть следующие 3 пункта.
-
Нет двух основных параметров метода должны быть одинаковыми
Например.
-
public static void main(int i)
-
public static void main(int i, int j)
-
public static void main(double j)
-
public static void main(String[] args)
-
Фактический метод main в Javas - это метод с (String[] args)
, поэтому фактическое выполнение начинается с открытого статического void main (String [] args), поэтому основной метод с (String[] args)
должен присутствовать в классе, если только это не детский класс.
-
Чтобы другие основные методы выполнялись, вам нужно вызывать их из основного метода (String[] args)
.
Вот подробное видео о том же: https://www.youtube.com/watch?v=Qlhslsluhg4&feature=youtu.be
Ответ 16
У меня есть проверка в java-версии 1.6.0_32, но работает один основной метод, например public static void main (String [] args) сигнатуры типа. Ex здесь, где я тестировал.
public class mainoverload
{
public static void main(String a)
{
System.out.println("\nIts "+a);
}
public static void main(String args[])
{
System.out.println("\nIts public static void main\n");
mainoverload.main("Ankit");
mainoverload.main(15,23);
mainoverload.main(15);
}
public static void main(int a)
{
System.out.println("\nIts "+a);
}
public static void main(int a,int b)
{
System.out.println("\nIts "+a+" "+b);
}
}