여러 주요 기능
나는 이것에 조금 새로운 그래서 나를 참 아라. 저는 현재 C #과 Java를 배우고 있으며 그 유사점 중 하나는 주 함수가 클래스 내에 캡슐화되어야한다는 것입니다. 예를 들면
public class HelloWorld {
public static void main(String[] args) {
// Some Code
}
}
이제 프로그램을 실행할 때 main이 종종 "진입 지점"이라는 것을 이해합니다. 따라서 기본적으로 프로그램은 주요 기능이있는 곳에서 실행을 시작합니다. 그러나 나는 두 언어 모두 여러 클래스 내에서 여러 주요 기능을 가질 수 있다고 믿습니다. 그래서 여러 주요 기능이있는 프로젝트를 컴파일 할 때 "진입 지점"은 어디에 있습니까? 컴파일러는 어디서 시작해야하는지 어떻게 알 수 있습니까?
.NET에서는 컴파일 할 때 사용할 Main 메서드가 포함 된 클래스를 정의 할 수 있습니다.
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()
에서 MyClass
. 다른 모든 main()
기능은 무시됩니다.
IDE를 사용하는 경우 사용 main()
하려는 함수가 포함 된 클래스를 설정할 수 있습니다.
C #에서는 여러 Main
방법을 사용할 수 있습니다.
Main
메서드 가 여러 개인 경우 컴파일러는 사용할 진입 점을 알지 못하므로 오류가 표시됩니다.
당신은 할 필요가 지정 Main
방법 컴파일에 사용되는을 : 당신은 Visual Studio 개발 환경에서 또는 CSC 컴파일러를 통해 컴파일러 옵션으로 사용할 수있는 방법을 지정할 수 있습니다.
메인 클래스는 단 한 가지 이유 때문에 특수 클래스입니다. Java Virtual Machine을 실행할 때 해당 함수는 JVM이 호출하는 것입니다. 본질적으로 다른 함수와 같으며 실제로 다른 클래스에서 한 클래스의 주 함수를 호출 할 수 있습니다.
여러 클래스가있는 프로젝트를 컴파일 할 때 다음과 같이 사용하려는 기본 클래스로 클래스를 실행하도록 JVM에 지시합니다.
java SomeClass
SomeClass가 컴파일되고 적절한 컴파일 된 파일이 클래스 경로에 있다고 가정하고 SomeClass의 기본 메소드를 실행합니다. (이것은 특정 OS에서 해결해야 할 일이지만 -cp 옵션이 클래스 경로를 지정하는 것이 상당히 일반적이라고 생각합니다). 그래서 이건:
java -cp /home/MyName Someclass
/ home / MyName 디렉토리에서 SomeClass의 주요 기능을 실행합니다.
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에서는 java
명령 을 실행할 때 기본 기능을 포함하는 클래스를 정의합니다 .
그러나 실행 가능한 jar를 만들 수도 있습니다 java -jar my.jar
. 이 경우 jar MANIFEST.MF
의 폴더 META-INF
에 라는 매니페스트 파일이 필요합니다 . 이 파일에서 다음 명령문을 사용하여 주 함수가 포함 된 클래스를 지정합니다 Main-Class: YourClass
..
여러 주요 함수의 경우 진입 점은 다음과 같이 선언 할 수 있습니다.
Visual Studio 개발 환경에서이 컴파일러 옵션을 설정하려면
프로젝트의 속성 페이지를 엽니 다.
응용 프로그램 속성 페이지를 클릭합니다.
Startup 개체 속성을 수정합니다.
참조 : http://msdn.microsoft.com/en-us/library/x3eht538.aspx
주요 메서드는 정적이므로 객체가 아닌 클래스에 속합니다. 따라서 객체에는 다른 주요 메서드가 전혀 포함되지 않습니다. main은 정적이므로 추가 main-method가 없습니다. 따라서 수업 당 한 번입니다.
If you have multiple main-methods in your project, you will specify which one to launch when starting your application
In fact, in binary file, for example, PE format in windows and ELF format in Linux or any other system, The header of binary file will specify where is the start address and there can be only one.
Which one should be the entry point? It depends on the linker. Just like @SetFreeByTruth said that you can specify it with command line parameters. Many linkers support specifying entry point with command line parameters. for example, gnu's gld can specify entry point with parameter -e.
I don't know the behavior of Java because it is loaded by Java virtual machine.
In Visual Studio, you select the project that you want to be the entry point, right click and Set as StartUp Project.
참고URL : https://stackoverflow.com/questions/11551412/multiple-main-functions
'Programing' 카테고리의 다른 글
Python unittest : 테스트 파일의 일부만 실행하는 방법은 무엇입니까? (0) | 2020.11.07 |
---|---|
문자열에 영숫자가 아닌 문자가 있는지 확인하는 방법은 무엇입니까? (0) | 2020.11.07 |
데이터 손실없이 Entity Framework 5 Code First 마이그레이션에서 데이터베이스 열의 이름을 바꾸는 방법은 무엇입니까? (0) | 2020.11.07 |
Rails 4의 has_many 'conditions'옵션과 동일한 것은 무엇입니까? (0) | 2020.11.07 |
절대 위치 지정을 사용하는 것이 나쁜 습관으로 간주됩니까? (0) | 2020.11.07 |