머리말
우리는 Java의 주요 기능에 매우 익숙합니다. Java 언어를 배운 모든 사람은이 프로그램의 입력 기능을 능숙하게 쓸 수 있다고 생각합니다. 그러나 주요 기능이 이러한 방식으로 작성된 이유는 각 키워드가 무엇을 의미합니까? 아마도 모든 사람이 쉽게 대답 할 수있는 것은 아닙니다. 또한 연구 중에이 문제가 발생했습니다. 온라인으로 정보를 검색하고 내 자신의 연습을 추가함으로써 마침내 경험을 얻었습니다. 나는 그것을 지키지 않고 모든 사람과 공유하기 위해 그것을 썼습니다.
Java의 메인 () 메소드
Java Virtual Machine은 기본 메소드를 통해 시작 해야하는 실행 프로그램을 찾아 주 기능이 위치한 클래스가 Java Virtual Machine에 의해로드되는지 여부를 확인합니다. 로드되지 않은 경우 클래스를로드하고 관련 다른 클래스에로드하십시오. 따라서 프로그램이 실행될 때 첫 번째 실행 방법은 main() 메소드입니다. 일반적으로 클래스 메소드를 실행하려면 먼저이 클래스의 객체를 인스턴스화 한 다음 " Object Name. Method Name ()을 전달해야합니다. "하지만 메인은 프로그램의 진입 점이기 때문에 현재 객체가 인스턴스화되지 않았으므로 주요 방법은 정적으로 선언 되므로이 메소드는" 클래스 이름을 통해 직접 호출 할 수 있습니다. 메소드 이름 () ".
Java의 Main () 메소드를보기 전에 가장 간단한 Java 응용 프로그램 Helloworld를 살펴 보겠습니다. 이 예제를 사용하여 Java 클래스의 main() 메소드의 미스터리를 설명합니다. 프로그램의 코드는 다음과 같습니다.
/ *** Java*/ Public Class HelloWorld {public static void main (String args []) {System.out.println ( "Hello World!"); }}1. 먼저 카테고리에 대해 이야기 해 봅시다.
Helloworld 클래스에는 main() 메소드가 있습니다. 즉, JVM을 통해 직접 시작하고 실행되는 Java 응용 프로그램입니다.
클래스이기 때문에 Java는 클래스가 공개 키워드 제약을받지 못하게합니다. 물론, 클래스의 정의는 공개 또는 무제한 키워드 (기본값)로만 제한 될 수 있습니다.
2. Main () 메소드에 대해 이야기 해 봅시다
main() 메소드는 다음과 같이 선언됩니다 : public static void main(String args[]) . 이와 같이 정의해야합니다. 이것은 Java 사양입니다.
왜 이렇게 정의되어 있습니까? JVM의 운영과 관련이 있습니다.
클래스에 main() 메소드가 있으면 "Java 클래스 이름"명령을 실행하면 가상 머신을 시작하여 클래스의 기본 메소드를 실행합니다.
JVM 은이 Java 응용 프로그램을 실행할 때 먼저 기본 메소드를 호출하기 때문에. 호출 할 때이 클래스의 대상은 인스턴스화되지 않지만 클래스 이름을 통해 직접 호출되므로 공개 정적으로 제한되어야합니다.
Java의 주요 방법의 경우 JVM은 제한 사항이 있으며 반환 값을 가질 수 없으므로 반환 값 유형이 무효입니다.
기본 메소드에는 입력 매개 변수도 있으며, 이는 유형 문자열 []이며 Java 사양이기도합니다. main() 메소드에는 항목 매개 변수가 있어야하며 클래스 세부 사항은 String[] 이어야합니다. 문자열 배열의 이름은 직접 설정할 수 있습니다. 습관에 따르면,이 문자열 배열의 이름은 일반적으로 Sun Java 사양 예제의 Mian 매개 변수 이름과 일치하며 Args라고합니다.
따라서 main() 메소드 정의는 " public static void main(String 字符串数组参数名[]) "이어야합니다.
3. main () 메소드는 예외를 던질 수 있습니다
따라서 main() 메소드에서 예외가 발생할 수 있으며 main() 메소드에서 예외를 선언 할 수도 있습니다.
예를 들어 다음이 정확합니다.
public class testmain {public static void main (string [] args)은 예외 {system.out.println ( "hahahahahahahahaha"); 새로운 예외를 던지십시오 ( ""); }}실행 결과 : Hahahahaha Exception in Thread "Main"java.lang.exception : at Masertest.testmain.main (testmain.java:11)에서 sun.reflect.nativeMethodaccessorimpl.invoke0 (기본 메소드) at at Sun.Reflect.nativeMethodaccessorimpl.invoke (nativeMethodaccessorimpl.java:39)에서 sun.reflect.delegatingmethodaccessorimpl.invoke (java.lang.lang.rffect.method. at com.intellij.rt.execution.application.appmain.main (appmain.java:90) 프로세스는 종료 코드로 완성되었습니다 1
4. main () 메소드의 문자열 매개 변수 배열의 함수
main() 메소드에서 문자열 매개 변수 배열 기능은 명령 줄 입력 매개 변수를 수신하고 명령 줄의 매개 변수는 공백으로 분리됩니다.
다음은이 배열을 초기화하고 사용하는 방법을 확인하는 예입니다.
/ *** 메인 메소드의 입력 매개 변수*/ public class testmain {public static void main (String Args []) {System.out.println ( "기본 메소드의 인쇄 입력 매개 변수!"); for (int i = 0; i <args.length; i ++) {system.out.println (args [i]); }}} 실행 방법 및 작동 결과
d :/study/basetest/src> javac testmain.java d :/study/basetest/src> java testmain 1 2 3 기본 메소드에서 입력 매개 변수를 인쇄하십시오! 1 2 3
5. Helloworld의 다른 버전을 제공하십시오
/ *** helloworld.hehe*/ public class helloworld2 {static {system.out.println ( "Hello Wordld!"); } public static void main (String args []) {system.exit (0); }} main() 메소드는 프로그램을 정상적으로 끝내기위한 문장 " System.exit(0); "의 내용을 실행합니다. "Helloworld!" 인쇄? 정적 코드 블록의 내용이 메인 호출 전에 호출되므로 비밀은 정적으로 인쇄됩니다.
VI. 예
가상 머신은 지정된 클래스의 메소드 주를 호출하여 시작하여 지정된 클래스가로드되어 클래스에서 사용하는 다른 유형을 연결하고 초기화하도록 지정된 클래스가로드됩니다. 예를 들어, 프로그램의 경우 :
공개 클래스 HelloApp {public static void main (String [] args) {System.out.println ( "Hello World!"); for (int i = 0; i <args.length; i ++) {system.out.println (args); }}}컴파일 후 명령 줄 모드를 입력 : Java HelloApp 실행 가상 머신
Java Virtual Machine은 HelloApp 메소드 메인을 메인으로 호출하여 시작하여 3 개의 문자열 "run", "Virtual"및 "Machine"이 포함 된 배열을 메인으로 전달합니다. 이제 HelloApp을 실행할 때 가상 머신이 취할 수있는 단계를 간단히 설명합니다.
나는 HelloApp 클래스의 주요 방법을 실행하기 시작했고 클래스가로드되지 않았다는 것을 알았습니다. 이는 가상 머신에 현재 클래스의 이진 대표가 포함되어 있지 않음을 의미합니다. 따라서 가상 머신은 클래스 로더를 사용하여 이러한 바이너리 담당자를 찾으려고 노력했습니다. 이 프로세스가 실패하면 예외가 발생합니다. 클래스가로드되면 기본 메소드가 호출되기 전에 클래스 HelloApp은 다른 유형에 연결되어 초기화되어야합니다. 링크는 검사, 준비 및 구문 분석의 세 단계로 구성됩니다. 로드 된 메인 클래스의 기호와 의미를 확인하고 클래스 또는 인터페이스의 정적 도메인을 작성하고 이러한 도메인을 표준 기본값으로 초기화 할 준비를하며, 구문 분석은 기본 클래스의 상징적 참조를 다른 클래스 또는 인터페이스로 확인해야합니다. 이 단계에서 선택 사항입니다. 클래스 초기화는 정적 초기화 함수의 실행 및 클래스에서 선언 된 정적 도메인의 초기화 생성자입니다. 클래스의 상위 클래스는 초기화되기 전에 초기화되어야합니다.
전체 프로세스는 다음과 같습니다.
요약
특별한 사양으로서, 주요 방법은 일반적인 방법과는 매우 다르며 많은 제한 사항이 있습니다. 원칙을 이해하려면 JVM 관련 지식을 학습해야합니다. 자바에서 배우는 데 큰 장애물입니다. 위는 편집자가 편집 한 주요 주요 원리 및 사용에 대한 요약입니다. 나는 그것이 당신에게 도움이되기를 바랍니다. 궁금한 점이 있으면 의사 소통을 위해 메시지를 남길 수 있습니다.