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

Несколько основных() методов в java

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

Например,

public class TestClass {
    public static void main (String[] args){
        TestClass foo = new TestClass();
    }
}

После того, как программа будет запущена, foo будет создан, и в ней будет другой общедоступный главный метод. Это вызовет какие-либо ошибки?

4b9b3361

Ответ 1

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

>java TestClass

Однако, сделав что-то вроде:

public class TestClass
{
 public static void main (String[] args)
 {
  TestClass foo = new TestClass();
  foo.main(args);
 }
}

или

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, который снова вызовет основной метод, и снова, и снова, и....

Если вы сомневаетесь, просто проверьте это: -)

Ответ 2

Основной метод - static, что означает, что он принадлежит классу, а не объекту. Таким образом, у объекта вообще не будет другого основного метода.

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

Если вы ссылаетесь на несколько основных методов в одной и той же программе, то это тоже не проблема. Основной класс просто указан и его основной метод выполняется для запуска программы (в случае файла jar это атрибут основного класса в файле манифеста.)

Ответ 3

У него не будет дополнительного метода main, так как main есть static. Так это один раз в классе.

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

Ответ 4

Это прекрасно. Наличие нескольких методов main не вызывает никаких проблем. При первом запуске Java-программы выполнение начинается с некоторой функции под названием main в классе, указанном пользователем или файлом .jar. После запуска программы все остальные функции, называемые main, по существу игнорируются или рассматриваются как другие функции.

Ответ 5

После поиска 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){
     System.out.println("Inside Overloaded main()");
  }

}

Я тестировал этот Java-код на JDK 1.7 и работает как прелесть!

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

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

Спасибо, ПК

Ответ 6

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

Ответ 7

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

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

Ответ 8

когда вы запускаете свой 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 имеет точную подпись, они могут использоваться как отдельная точка входа для запуска приложения.  На ваш вопрос: если вы удалили подпись, как вы делали выше, изменив аргумент, если основной метод. Он будет действовать как обычный метод.

Ответ 9

Это все о механизме выполнения JVM. Помните, вы пишете >java com.abc.MainClass в командной строке cmd.

Это объясняет все. Если главный метод не найден здесь, он выдает время выполнения. Ошибка: главный метод не найден в классе MainClass. Теперь, если основной метод найден здесь, он действует как первая точка, когда счетчики программ должны сопоставлять и начинать выполнение инструкций. Загруженные классы загружаются, тогда называемые методы могут вызываться с использованием экземпляров, созданных внутри. Итак, основной класс специфичен, хотя один класс может иметь только один основной метод. Обратите внимание: основная подпись метода никогда не изменяется. Вы можете иметь два перегруженных основных метода в одном классе, например

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

public static void main() {}//перегружен в том же классе.

При связывании с Static исходный основной файл решается и идентифицируется механизмом выполнения.

Ответ 10

Еще один интересный момент для рассмотрения - это случай, когда у вас есть два разных класса в 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[].