java-se - Java:请问这段代码的执行顺序是怎么样的,如果能够详细点更好,谢谢
PHPz
PHPz 2017-04-18 10:36:29
0
2
355
PHPz
PHPz

学习是最好的投资!

모든 응답(2)
小葫芦

클래스 변수(정적 변수)>정적 블록>구성 방법>일반 멤버 변수>하위 클래스의 경우 정적을 제외합니다. JAVA의 모든 정적 수정은 컴파일 타임에 공간을 할당하며 객체는 사용될 때만 할당됩니다. 즉, new가 사용될 때 하위 클래스가 상위 클래스를 상속할 때 먼저 상위 클래스에 할당되어야 합니다. 아버지 없이도 아들이 나올 수 있잖아요

迷茫

컴파일된 class 파일을 디컴파일하여 초기화 과정의 이해를 도울 수 있습니다.

명령줄의 javap -l -c -p -v App 명령어는 실행 후 디컴파일된 내용을 가져옵니다. 질문자가 제공한 소스 코드를 바탕으로 간단히 분석해 보겠습니다.
다음은 초기화 관련 디컴파일된 내용의 일부입니다
App의 클래스 파일

으아아아

SubClass의 클래스 파일

으아아아

SuperClass의 클래스 파일

으아아아

내용을 대략적으로 설명해주세요. (주제가 JVM指令集에 관심이 있다면 JVM 사양을 읽어보시면 아주 자세하게 설명되어 있습니다.)
위 디컴파일 내용 중 별표 표시된 부분이 제가 추가한 주석입니다. 코드 실행 순서에 따라:
1. JVM은 App 클래스를 로드하고, 이때 App의 정적 변수는 앱 调用App的构造函数 바이트코드에 따라 초기화됩니다. > 2.
의 생성자로 이동하여 먼저 App의 AppObject에 해당하는 상위 클래스 调用Object的构造函数를 초기화합니다. 3. App의
SubClass에 해당하는 인스턴스 변수 调用SubClass的构造函数를 초기화합니다. 4. 이때
는 첫 번째 클래스로 로드되어야 하며, SubClass의 SubClass静态块5에 해당하는 정적 변수를 초기화하고 정적 블록을 실행해야 합니다. 이때
의 코드를 실행하면 " 1" SubClass6. SubClass의
SubClass7에 해당하는 构造函数이 로드된 후 생성자를 실행합니다.
생성자는 처음에 SubClassSuperClass의 생성자를 실행합니다. 🎜>8 in SubClass. 调用SuperClass的构造函数의 생성자에서 코드 인쇄를 실행합니다. "Get string construction SuperClass"를 종료합니다.
9. SuperClass 생성 완료
7의 코드 위치로 이동하여 계속 실행합니다. SuperClass 나머지 코드 return 10. SubClass의 생성자 코드를 실행하여 출력 "2"를 인쇄합니다.
11. 3의 코드 위치에 SubClass 생성자
를 실행한 후 의 나머지 코드를 계속 실행합니다. SubClass return 12. App의 생성자 코드를 실행하고 " 4"를 출력합니다
13. App의 생성자
을 실행한 후 1의 코드 위치로 이동하여 초기화를 진행합니다. 정적 변수 App14. 정적 블록에서 메소드를 실행하고 "3"을 허용합니다 return15.
입력 메소드를 입력하고 “Hello”를 인쇄합니다
main위 과정은 대략적인 실행 순서입니다.

답변 내용이 다소 헷갈릴 수 있으니 이해가 안 되는 부분이 있으면 저에게 물어보세요.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!