Несколько основных функций

Я немного новичок в этом, так что медведь со мной. В настоящее время я изучаю С# и Java, и одно из их сходств заключается в том, что основная функция должна быть инкапсулирована внутри класса. Например

public class HelloWorld {
    public static void main(String[] args) {
        // Some Code
    }
}

Теперь я понимаю, что основная часть часто является "точкой входа" при запуске программы. Таким образом, ваша программа начнет выполнение, где бы ни была основная функция. Но я верю, что на обоих языках вы можете иметь несколько основных функций в нескольких классах. Итак, когда я компилирую проект с несколькими основными функциями, где находится "точка входа"? Как компилятор знает, с чего начать?

Ответ 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".