본문에서 그들은 코드 예제의 맨 아래에 main 함수를 넣었습니다. 일반적인 책 독자로서, 저는 1 행부터 읽기 시작합니다. 코딩은 책 (하단에서 상단, 줄당 한 줄)과 다른 제어 흐름을 가지고 있음을 이해하지만, 왜 처음으로 원하는지 이해하지 못합니다 귀하의 프로그램의 진입 점이 아닌 코드 행. 이 특별한 이유가 있습니까?main (String args [])을 코드 하단에 두는 이유는 무엇입니까?
답변
나는 저자에 대해 말할 수 있지만 몇 가지 이유를 생각할 수 : 저자는 클래스의 실제 방법을 강조하고 싶었을 수도있다
. 실제로 실제로 매우 적은 Java 클래스는
main
메소드 (1 % 미만)를 가지고 있습니다. 클래스에서 중요한 것은 객체가 작동하는 방식입니다. 아마도main
방법은 거의 후속 고려 사항이나 좋은 것입니다.자바는 C 프로그래밍 언어의 영향을받습니다. Java에서 메서드가 선언되는 순서는 중요하지 않지만 C에서는 (적어도 C의 이전 버전에서는)
main
위에 선언 된 경우에만main
에서 함수를 호출 할 수있었습니다. 따라서 사람들은 프로토 타입을 사용하거나 하단에main
을 넣었습니다. 이렇게 많은 사람들이 버릇 없게 만들었습니다. 오, 나는 몰라요, 이것은 잠재 의식으로 이것들을 자바로 옮겼다는 생각에 영향을 미쳤습니다.
하지만 진입 점을 먼저 표시해야하고, 기능이 서로 "페이지 아래로"가는 호출해야한다는 감각은 많은 사람들에 의해 공유됩니다. Robert C. Martin (Bob 삼촌)은 이것이 좋은 일이라고 말했습니다.
부칙
내가 페이지를 아래로 읽는 삼촌 밥의 제안, 뭔가 알고에 대한 참조를 찾고 있었다 더 - 또는 - 덜 신문 은유있다. 나는 마틴의 클린 코드 책의 서평에서 this snippet을 발견 :
... 코드를 서식에 관하여 언급 한 신문 유. 이것은 신문 기사처럼 코드를 읽게하는 아이디어를 묘사합니다. 우리는 더 많은 세부 사항을 읽기 전에 클래스 상단에서 어떻게 작동하는지에 대한 일반적인 아이디어를 얻을 수 있어야합니다.
은, 당신도 알다시피, 난 정말 C에서 상속 전통 생각이나 main
종종 자바 하단에 표시하게 상향식 (bottom-up) - 다움에 대한 인식을 강조 (꼭 먼저 그 호출되는 함수를 선언).
어떻게 C에 있어야하는지에 대한 참조는 사람들이 왜 일관성 문제로 Java에서 그것을 할 수 있는지를 쉽게 알 수있게 해줍니다. 감사! – Joop
주요 기능은 진입 점입니다. 메인이 하단에 나타나야한다는 어렵고 빠른 규칙은 없습니다. 그것은 개발자의 전적인 권한입니다. 한 가지 논리는 여러 가지 다른 기능과 데이터를 기반으로하는 주요 기능입니다. 종속 함수의 선언은 Java에서 선언되고 정의되어야합니다. 그러면 주 함수가 이들 함수에 액세스 할 수 있습니다 (앞으로 선언을 피하는 방식으로).
"앞으로 선언하지 않으려 고"하는 이유는 무엇입니까? 그냥 궁금해서. –
@RayToal C++과 같은 언어의 경우 함수 내에서 호출되는 함수, 예를 들어 g가있는 경우 f가 g보다 먼저 정의 된 경우 별도의 선언이 필요하지 않습니다. 그렇지 않으면 f를 먼저 선언해야합니다 (전달 참조) 정의하고 나중에 정의 할 필요가있는 두 곳, 선언 및 정의. Java에서는 선언에 선언이 포함되므로 함수 참조가 한 곳에서 필요합니다. 그런 식으로. –
- 1. main (String [] args) 다른 String [] args = {.....}?
- 2. main()과 main (String args [])의 차이점
- 3. C# static Main (string [] args)
- 4. Java main() 메서드가 String args 배열을 허용하는 이유는 무엇입니까?
- 5. public static void main (String args [])
- 6. static void Main (string [] args)을 변경할 수 없습니다.
- 7. main (String [] args) 클래스가 실제로 Java에서 어떤 클래스에 있습니까?
- 8. (string [] args)와 System.Environment.CommandLine의 차이점은 무엇입니까?
- 9. String [] args 매개 변수 : java.lang.ArrayIndexOutOfBoundsException
- 10. public void main (String [] args) 잘못된 java 기본 메서드 서명입니까?
- 11. args (string [])에 문자열
- 12. public static void main (String [] args) - 실제로 정적 인 이유는 무엇입니까?
- 13. String doInBackground (String ... args) 사용
- 14. C#의 static void main (string [] args)과 static void main()의 차이점은 무엇입니까?
- 15. 어디에서 "public static void main (String [] args)"을이 프로그램에 넣어야합니까?
- 16. public static void main (String [] args) 메서드는 어디에 두어야합니까?
- 17. 페이지 상단과 하단에 호출기를 두는 방법은 무엇입니까?
- 18. Java와 C#이 클래스 내부에 main 함수를 두는 이유는 무엇입니까?
- 19. Visual Studio에서 여러 프로젝트를 실행하려고 할 때 Main (string [] args)을 통해 인수를 전달하려면 어떻게해야합니까? (문자열 [] args) VS
- 20. main()이 main()이 아니거나 main()이 아닌 경우에도 c가 main()을 허용하는 이유는 무엇입니까?
- 21. 웹 페이지 하단에 간격을 두는 동적 텍스트
- 22. Error : Main 메서드를 Text 클래스에서 찾을 수 없습니다. main 메서드를 다음과 같이 정의하십시오. public static void main (String [] args)
- 23. `public static <T> void main (String [] args)`이 의미하는 것은 무엇입니까?
- 24. 파이썬에서 "if __name __ == '__ main__': main()"을 사용하고 단순히 "main()"을 사용하지 않는 이유는 무엇입니까?
- 25. Java : String [] 인수를 사용할 때 문자열 args []
- 26. app.get()을 express.js의 올바른 위치에 두는 것이 중요한 이유는 무엇입니까?
- 27. 바닥 글을 항상 페이지 하단에 두는 방법은 무엇입니까?
- 28. Java 프로그래밍 : main (String [] args)에서 컴파일러 오류, 클래스 인터페이스 또는 enum이 예상됩니다.
- 29. Java에서 String [] args가 필요한 이유는 무엇입니까?
- 30. Servlet에서 사용되는 Websocket은 "public static void main (final String [] args)"이 필요합니까?
나는 그것이 작가의 코딩 스타일이라고 생각한다. 내 마음에 오는 유일한 점은 스택이 어떻게 작동 하는지를 반영하기 위해이 작업을 수행 할 수 있다는 것입니다. 메인은 첫 번째 요소입니다 (맨 아래에있는 것임). – BackSlash
이전 C 시간으로 거슬러 올라갑니다. 어디에서 먼저 선언했는지 결정적이었습니다. – Fildor
가능한 [Java 클래스 파일의 main() 메소드의 위치] (http : // stackoverflow.com/questions/7911829/preferred-java-class-file-main-method-in-java-class-file) –