Несколько основных функций
Я немного новичок в этом, так что медведь со мной. В настоящее время я изучаю С# и Java, и одно из их сходств заключается в том, что основная функция должна быть инкапсулирована внутри класса. Например
public class HelloWorld {
public static void main(String[] args) {
// Some Code
}
}
Теперь я понимаю, что основная часть часто является "точкой входа" при запуске программы. Таким образом, ваша программа начнет выполнение, где бы ни была основная функция. Но я верю, что на обоих языках вы можете иметь несколько основных функций в нескольких классах. Итак, когда я компилирую проект с несколькими основными функциями, где находится "точка входа"? Как компилятор знает, с чего начать?
Ответы
Ответ 1
В .NET вы можете определить, какой класс содержит метод Main, который вы хотите использовать при компиляции.
http://msdn.microsoft.com/en-us/library/x3eht538.aspx
В Java, если вы привязываетесь к банке, вы можете определить свою точку входа в манифесте jar.
http://docs.oracle.com/javase/tutorial/deployment/jar/appman.html
Ответ 2
В Java компьютер определяет "точку входа", когда вы фактически выполняете программу, а не когда вы компилируете. Например, из командной строки
java MyClass
выполняет поиск main()
в MyClass
. Все остальные функции main()
игнорируются.
Если вы используете IDE, вы можете установить, какой класс содержит функцию main()
, которую вы хотите использовать.
Ответ 3
В С# вы можете использовать несколько методов Main
.
Если существует несколько методов Main
, компилятор не знает, какую точку входа использовать, и, следовательно, он покажет вам ошибку.
Вам необходимо указать метод Main
, который будет использоваться при компиляции:
Вы можете указать, какой метод будет использоваться в качестве параметра компилятора в среде разработки Visual Studio или через компилятор csc.
Ответ 4
Основной класс - это специальный класс только по одной причине: при запуске виртуальной машины Java эта функция является тем, что вызывает JVM. Это по существу, как и любая другая функция, и на самом деле вы можете вызвать одну основную функцию класса из другого класса.
При компиляции проекта с несколькими классами вы сообщаете JVM о запуске класса с основным классом, который вы хотите использовать, например:
java SomeClass
и он будет запускать основной метод SomeClass, предполагая, что SomeClass скомпилирован и что соответствующий скомпилированный файл находится в вашем пути к классам. (Это то, что вам нужно будет решить с вашей конкретной ОС, но я считаю, что для опции -cp достаточно указать путь к классу). Итак:
java -cp /home/MyName Someclass
будет запускаться основная функция SomeClass в каталоге/home/MyName
Ответ 5
В С# вы указываете точку входа с помощью параметра /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
Ответ 6
В Java, как указывали другие, вы определяете класс, содержащий вашу основную функцию, при запуске команды java
.
Но вы также можете создать исполняемую банку, которую можно запустить с помощью java -jar my.jar
. В этом случае вам понадобится файл манифеста с именем MANIFEST.MF
в папке META-INF
в банке. В этом файле вы указываете класс, содержащий основную функцию, с помощью инструкции: Main-Class: YourClass
.
Ответ 7
Для нескольких основных функций точка входа может быть объявлена:
Чтобы установить этот параметр компилятора в среду разработки Visual Studio
Откройте страницу свойств проекта.
Перейдите на страницу свойств приложения.
Измените свойство объекта запуска.
ссылка: http://msdn.microsoft.com/en-us/library/x3eht538.aspx
Ответ 8
Основной метод - static, что означает, что он принадлежит классу, а не объекту. Таким образом, объект не будет иметь другого основного метода внутри него. У него не будет дополнительного основного метода, так как основной является статическим. Так это один раз в классе.
Если у вас несколько основных методов в вашем проекте, вы укажете, какой из них запускаться при запуске приложения
Ответ 9
Фактически, в двоичном файле, например, в формате PE в Windows и в формате ELF в Linux или любой другой системе, заголовок двоичного файла будет указывать, где находится начальный адрес, и может быть только один.
Какая должна быть точка входа? Это зависит от компоновщика. Как и @SetFreeByTruth, вы можете указать его с параметрами командной строки.
Многие линкеры поддерживают указание точки входа с параметрами командной строки. например, gnu gld может указать точку входа с параметром -e.
Я не знаю поведения Java, потому что он загружается виртуальной машиной Java.
Ответ 10
В Visual Studio вы выбираете проект, который вы хотите стать точкой входа, щелкните правой кнопкой мыши и выберите "Сделать как проект StartUp".