Java два метода main

Несколько методов main () в java

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

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

10 ответов

это не вызовет ошибок. Только потому, что ты!—5—>инициализации объект, не означает, что метод main выполняется. Java будет только первоначально вызывать основной метод переданного ему класса, например

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

когда сомневаетесь, просто проверьте его: -)

метод main является статическим, что означает, что он принадлежит к классу, а не объекту. Таким образом, объект не будет иметь другого основного метода внутри него вообще.

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

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

у него не будет дополнительного main -метод, as main is static . Так что один раз за класс.

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

Это прекрасно. Имея несколько main методы не вызывают никаких проблем. При первом запуске программы Java выполнение начинается в некоторые

после поиска класса 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 []) » для начала, а затем вы можете вызвать перегруженные основные методы внутри этого main, и он должен работать наверняка.

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

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

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

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, он всегда будет искать подпись public static void main (String args []) в классе. Поэтому предположим, если вы вызываете аргумент командной строки, он будет искать сигнатуру метода в классе и не будет вызывать другое, пока u явно не вызовет его по имени класса.

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

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

Читайте также:  Админ-панель

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

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

public static void main (String[] args) <>

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

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

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

обратите внимание на несколько дополнительных моментов:

  1. вы сможете работать SecondClass.class хотя это класс не был публичным в исходном файле!
  2. FirstClassMultiply перегрузка основной способ это нормально, но только точка входа к вашему prog будет основным методом с

Источник

Java main () метод объяснил

Каждой программе нужно место для запуска; говорить о программах на Java — это метод main .

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

Читайте также:  Геттеры в классах java

2. Общая подпись

Наиболее распространенный шаблон основного метода:

public static void main(String[]args)

Так мы узнали это, так IDE автоматически заполняет код для нас. Но это не единственная форма, которую может принять этот метод, есть некоторые допустимые варианты, которые мы можем использовать , и не каждый разработчик обращает внимание на этот факт.

Прежде чем мы углубимся в эти сигнатуры методов, давайте рассмотрим значение каждого ключевого слова общей сигнатуры:

  • public — модификатор доступа, означающий глобальную видимость
  • static — доступ к методу можно получить прямо из класса, мы

не нужно создавать экземпляр объекта, чтобы иметь ссылку и использовать его ** void — означает, что этот метод не возвращает значение

при выполнении Java-программы

Что касается параметра args , он представляет значения, полученные методом. Это то, как мы передаем аргументы программе при первом запуске.

Параметр args является массивом __String __s. В следующем примере:

java CommonMainMethodSignature foo bar

мы выполняем Java-программу с именем CommonMainMethodSignature и передаем 2 аргумента: foo и bar . Доступ к этим значениям внутри метода main возможен как args[0] (со значением foo ) и args[1] (со значением bar в качестве значения).

В следующем примере мы проверяем аргументы, чтобы решить, загружать ли тестовые или производственные параметры:

public static void main(String[]args) < if (args.length >0) < if (args[0].equals("test")) < //load test parameters >else if (args[0].equals("production")) < //load production parameters >> >

Всегда полезно помнить, что IDE также могут передавать аргументы программе.

3. Различные способы написания метода main ()

Давайте проверим несколько разных способов написания метода main . Хотя они не очень распространены, они являются действительными подписями.

Обратите внимание, что ни один из них не относится к методу main , их можно использовать с любым методом Java, но они также являются действительной частью метода main .

Квадратные скобки могут быть расположены рядом с String , как в общем шаблоне, или рядом с args с любой стороны:

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

Аргументы могут быть представлены как varargs:

public static void main(String. args)

Мы даже можем добавить strictfp для метода main () , который используется для совместимости между процессорами при работе со значениями с плавающей запятой:

public strictfp static void main(String[]args)

synchronized и final также являются допустимыми ключевыми словами для метода main , но здесь они не будут иметь эффекта.

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

public static void main(final String[]args)

Чтобы завершить эти примеры, мы также можем написать метод main со всеми вышеупомянутыми ключевыми словами (которые, конечно, вы, вероятно, никогда не будете использовать в практическом приложении):

final static synchronized strictfp void main(final String[]args)

4. Наличие нескольких методов main ()

Мы также можем определить более одного main метода внутри нашего приложения.

Фактически, некоторые люди используют его как примитивную технику тестирования для проверки отдельных классов (хотя рамки тестирования, такие как JUnit , гораздо больше указаны для этого упражнения)

Читайте также:  Html text background color padding

Чтобы указать, какой метод main должен выполнять JVM как точка входа нашего приложения, мы используем файл MANIFEST.MF . Внутри манифеста мы можем указать основной класс:

Main-Class: mypackage.ClassWithMainMethod

Это в основном используется при создании исполняемого файла .jar . Мы указываем, какой класс имеет метод main для запуска выполнения, через файл манифеста, расположенный в META-INF/MANIFEST.MF (закодирован в UTF-8)

5. Заключение

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

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

Источник

Java два метода main

Если переменные и константы хранят некоторые значения, то методы содержат собой набор операторов, которые выполняют определенные действия.

Общее определение методов выглядит следующим образом:

[модификаторы] тип_возвращаемого_значения название_метода ([параметры]) < // тело метода >

Модификаторы и параметры необязательны.

По умолчанию главный класс любой программы на Java содержит метод main, который служит точкой входа в программу:

public static void main(String[] args)

Ключевые слова public и static являются модификаторами. Далее идет тип возвращаемого значения. Ключевое слово void указывает на то, что метод ничего не возвращает.

Затем идут название метода — main и в скобках параметры метода — String[] args . И в фигурные скобки заключено тело метода — все действия, которые он выполняет.

Создадим еще несколько методов:

public class Program < public static void main (String args[])< >void hello() < System.out.println("Hello"); >void welcome() < System.out.println("Welcome to Java 10"); >>

Здесь определены два дополнительных метода: hello и welcome, каждый из которых выводит некоторую строку на консоль. Методы определяются внутри класса — в данном случае внутри класса Program, в котором определен метод main.

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

Вызов метода осуществляется в форме:

После имени метода указываются скобки, в которых перечисляются аргументы — значения для параметров метода.

Например, определим и выполним несколько методов:

public class Program < public static void main (String args[])< hello(); welcome(); welcome(); >static void hello() < System.out.println("Hello"); >static void welcome() < System.out.println("Welcome to Java 10"); >>

В методе main вызывается один раз метод hello и два раза метод welcome. В этом и заключается одно из преимуществ методов: мы можем вынести некоторые общие действия в отдельный метод и затем вызывать многократно их в различных местах программы. Поскольку оба метода не имеют никаких параметров, то после их названия при вызове ставятся пустые скобки.

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

В итоге после компиляции и выполнения программы мы увидим на консоли:

Hello Welcome to Java 10 Welcome to Java 10

Источник

Оцените статью