Несколько Основных Функций
Я немного новичок в этом так, медведь со мной. Сейчас я изучаю C# и Java, и их сходство заключается в том, что основная функция должна быть инкапсулирована в класс. Например
public class HelloWorld {
public static void main(String[] args) {
// Some Code
}
}
теперь я понимаю, что main часто является "точкой входа" при запуске программы. Таким образом, ваша программа начнет выполняться везде, где находится основная функция. Но я считаю, что в обоих языках вы можете иметь несколько основных функций в нескольких классах. Поэтому, когда я компилирую проект с несколькими основными функциями, где находится "точка входа"? Откуда компилятор знает, с чего начать?
10 ответов:
в .NET вы можете определить, какой класс содержит основной метод, который вы хотите использовать при компиляции.
http://msdn.microsoft.com/en-us/library/x3eht538.aspx
в Java, если вы связываетесь с jar, вы можете определить свою точку входа в манифест jar.
http://docs.oracle.com/javase/tutorial/deployment/jar/appman.html
в Java компьютер определяет "точку входа", когда вы фактически выполняете программу, а не при компиляции. Например, из командной строки
java MyClass
ищет
main()
inMyClass
. Все остальныеmain()
функции игнорируются.если вы используете IDE, то вы можете установить, какой класс содержит
main()
функция, которую вы хотите использовать.
В C#, вы можете использовать несколько
Main
методы.Если есть несколько
Main
методы, компилятор не знает, какую точку входа использовать, и, следовательно, он покажет вам ошибку.вы нужно указать
Main
метод для использования при компиляции: Можно указать, какой метод будет использоваться в качестве параметра компилятора в среде разработки Visual Studio или через компилятор csc.
основной класс является специальным классом только по одной причине: когда вы запускаете виртуальную машину Java, эта функция является тем, что вызывает JVM. Он по существу похож на любую другую функцию, и фактически вы можете вызвать основную функцию одного класса из другого класса.
когда вы компилируете проект с несколькими классами, вы говорите JVM, чтобы запустить класс с основным классом, который вы хотите использовать, например:
java SomeClass
и он будет запускать основной метод SomeClass, предполагая, что SomeClass компилируется и что соответствующий скомпилированный файл находится в вашем classpath. (Это то, что вам придется работать с вашей конкретной ОС, но я думаю, что это довольно обычно для опции-cp, чтобы указать путь к классу). Так вот:
java -cp /home/MyName Someclass
будет работать основная функция SomeClass в каталоге / home / MyName
в C#, вы указываете точку входа с помощью
/main:
опции компилятора.рассмотрим следующий код, содержащий два
main()
функции:namespace Application { class ClassOne { static void main () { // Code here } } class ClassTwo { static void main () { // Code here } } }
использовать
ClassOne.main()
в качестве точки входа вы должны указать следующее при компиляции:csc /main:Application.ClassOne hello.cs
в Java, как указывали другие, вы определяете класс, содержащий вашу основную функцию, когда вы запускаете .
но вы также можете создать исполняемый файл jar, который можно запустить с
java -jar my.jar
. В этом случае вам нужен файл манифеста с именемMANIFEST.MF
в папкеMETA-INF
в банке. В этом файле вы указываете класс, содержащий основную функцию, используя инструкцию:Main-Class: YourClass
.
для нескольких основных функций точка входа может быть объявлен :
чтобы установить этот параметр компилятора в среде разработки Visual Studio
откройте страницу свойств проекта.
щелкните страницу свойств приложения.
изменить свойство объекта запуска.
Ссылка:http://msdn.microsoft.com/en-us/library/x3eht538.aspx
метод main является статическим, что означает, что он принадлежит к классу, а не объекту. Таким образом, объект не будет иметь другого основного метода внутри него вообще. Он не будет иметь дополнительного main-метода, так как main является статическим. Так что это один раз за класс.
Если у вас есть несколько основных методов в вашем проекте, вы укажете, какой из них запускать при запуске приложения
фактически, в двоичном файле, например, формат PE в windows и формат ELF в Linux или любой другой системе, заголовок двоичного файла будет указывать, где находится начальный адрес, и может быть только один.
какой из них должен быть точкой входа? Это зависит от компоновщика. Так же, как @SetFreeByTruth сказал, что вы можете указать его с параметрами командной строки. Многие компоновщики поддерживают указание точки входа с помощью параметров командной строки. например, gld gnu может указать точку входа с помощью параметр -е.
Я не знаю поведение Java, потому что он загружен виртуальной машиной Java.