Подтвердить что ты не робот

Могут ли существовать два основных метода в Java-программе?

Могут ли существовать два основных метода в программе Java? Только по разнице в их аргументах, например:

public static void main(String[] args)

а второй может быть

public static void main(StringSecond[] args)

Если возможно, какой метод будет использоваться в качестве точки входа? Как определить это? пожалуйста, помогите.

4b9b3361

Ответ 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 пункта.

  1. Нет двух основных параметров метода должны быть одинаковыми

    Например.

    • 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)
  2. Фактический метод main в Javas - это метод с (String[] args), поэтому фактическое выполнение начинается с открытого статического void main (String [] args), поэтому основной метод с (String[] args) должен присутствовать в классе, если только это не детский класс.

  3. Чтобы другие основные методы выполнялись, вам нужно вызывать их из основного метода (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);
}
}