Java에서 main ()이 무효 인 이유는 무엇입니까?
C와 유사한 구문을 사용하는 언어의 경우 main () 메서드를 선언하여 int 또는 float 값 (또는 void)을 반환합니다. Java의 main ()에서 무효가 아닌 반환 유형을 선언 할 수 있습니까? 그렇지 않다면 왜 안됩니까? 이것은 Java 프로그램이 OS에 값을 반환하지 않음을 의미합니까?
main()
방법은 참으로 있어야합니다 void
반환 유형을. "실행-가상 머신 시작"( §12.1.4 ) 에 대한 Java 언어 사양 에서 :
이 방법은
main
선언해야합니다public
,static
하고void
. 문자열 배열 인 단일 인수를 허용해야합니다.
프로그램이 "실행-프로그램 종료"( §12.8 ) 에서 종료되는시기를 설명합니다 .
프로그램은 모든 활동을 종료 하고 다음 두 가지 중 하나가 발생하면 종료 됩니다.
- 데몬 스레드가 아닌 모든 스레드가 종료됩니다.
- 일부 스레드는
exit
클래스Runtime
또는 클래스 의 메소드를 호출하고System
종료 작업은 보안 관리자에 의해 금지되지 않습니다.
즉, main
메서드가 완료 되기 전이나 후에 프로그램이 종료 될 수 있습니다 . main
따라서 반환 값은 의미가 없습니다. 프로그램이 상태 코드를 반환하도록하려면 다음 메서드 중 하나를 호출합니다 (세 가지 메서드는 모두 정상적으로 반환되지 않음).
System.exit(int status)
-동등Runtime.getRuntime().exit(status)
Runtime.exit(int status)
-종료 시퀀스를 시작하여 현재 실행중인 JVM을 종료합니다 ( 필요한 경우 등록 된 모든 종료 후크 및 호출되지 않은 종료 자 실행 ). 이 작업이 완료되면 JVM이 중지됩니다.Runtime.halt(int status)
-현재 실행중인 JVM을 강제 종료합니다.
세 가지 중 System.exit()
JVM을 종료하는 가장 편리한 방법입니다.
이것은velocityreviews
같은 주제에 대한 흥미로운 토론입니다 .
가장 밝은 부분:
덧붙여서, 이것은 프로그래밍 언어에 독립적 인 보편적 인 이유가 아니라 main에 대한 잘못된 서명 이기 때문에 C와 C ++에서 나쁜 스타일로 간주 됩니다. 실제로 작동해서는 안되는 것 중 하나이지만 구현에있을 수 있습니다.
Java에서 main이 void를 반환하는 이유는 스레드입니다. 멀티 스레딩이 널리 알려진 기술이되기 전에 C와 C ++는 둘 다 언어로 설계되었으며 나중에 둘 다 스레드가 접목되었습니다. Java는 처음부터 다중 스레드 환경으로 설계되었으며 솔직히 하나 이상의 스레드를 사용하지 않는 사소하지 않은 Java 응용 프로그램을 작성하는 것은 드문 일입니다. 따라서 프로그램이 메인의 처음부터 끝까지 선형 적으로 이동한다는 생각은 약간 구식입니다.
작성자
www.designacourse.com 누구나 어디서나 교육하는 가장 쉬운 방법. Chris Smith-수석 소프트웨어 개발자 / 기술 트레이너 MindIQ Corporation
main
메소드가 void
리턴 유형으로 있는 이유 는 일단 main
완료되면 전체 프로그램이 완료되었음을 의미하지는 않기 때문입니다. main
새 스레드를 생성 하면 이 스레드는 프로그램을 계속 실행시킬 수 있습니다. 반환 유형은 main
이 시점에서별로 의미가 없습니다.
예를 들어, 이것은 main
방법이 일반적으로 Swing 스레드에서 GUI를 시작한 다음 main
완료 되는 Swing 애플리케이션에서 매우 일반적 이지만 프로그램은 여전히 실행 중입니다.
System.exit ()를 사용하여 int를 반환 할 수 있습니다.
OS가 정수를 기대하기 때문에 정수 이외의 것을 반환하는 것은 의미가 없습니다. 아무것도 반환되지 않는 경우 기본값은 0이며 OK를 의미합니다. 다른 값은 일반적으로 오류 또는 특수 조건을 알리는 데 사용됩니다.
참고 URL : https://stackoverflow.com/questions/540396/why-is-main-in-java-void
'programing tip' 카테고리의 다른 글
마우스 오버시 다른 스타일 구성 요소를 타겟팅합니다. (0) | 2020.12.04 |
---|---|
Seaborn 상자 그림에 제목을 추가하는 방법 (0) | 2020.12.04 |
javascript에서 URL 체계가 지원되는지 확인 (0) | 2020.12.04 |
Python 예외에 대한 모범 사례? (0) | 2020.12.04 |
이벤트 핸들러와 콜백의 차이점 (0) | 2020.12.04 |