자바 의 면접 문제 - 정적 변수 초기 화 과정
제목 은 다음 과 같다.
public class Test{
private static Test tester = new Test(); //step 1
private static int count1; //step 2
private static int count2 = 2; //step 3
public Test(){ //step 4
count1++;
count2++;
System.out.println("" + count1 + count2);
}
public static Test getTester(){ //step 5
return tester;
}
public static void main(String[] args){
Test.getTester();
}
}
― 상기 코드 실행 순서 ~ 출력 결과 ~
정 해:
static 대상 의 성질 에 따라 프로그램의 실행 절 차 는: Test tester = null 입 니 다.int count1 = 0; int count2 = 0; tester = new Test(); count1 ++; count2 ++; 출력 1 1 count 2 = 2;최종 결 과 는 12, 출력 은 1.
----------------------------------------------------------------------
1. JVM 가상 컴퓨터 의 작 동 은 안내 클래스 로 더 (Bootstrap Class Loader) 를 통 해 초기 화 클래스 를 불 러 오 는 것 입 니 다. 이 종 류 는 가상 컴퓨터 의 구체 적 인 실현 에 의 해 지 정 됩 니 다. 즉, 일반적인 의미 의 작 동 클래스 (주 클래스) 입 니 다.그리고 가상 컴퓨터 가 이 종 류 를 연결 하여 Public void main (String []) 방법 을 초기 화하 고 호출 합 니 다.2. 면접 문 제 는 문맥 에 따라 초기 화 류 가 Test 류 라 고 볼 수 있 기 때문에: a. 먼저 이 종 류 를 불 러 온 다음 에 링크 의 준비 단계 (링크 는 검증, 준비, 참조 세 단계 포함) 에서 모든 클래스 (정적) 변수 에 메모 리 를 할당 하고 기본 값 (Test tester = null) 으로 설정 합 니 다.int count1 = 0; int count2 = 0;) b. 링크 가 완 료 된 후에 (클래스) 초기 화 를 하고 코드 에서 설명 하 는 순서에 따라 클래스 (정적) 변 수 를 초기 화 합 니 다. 즉, 먼저 호출 하 는 것 입 니 다.
Java code
private
static
Test tester
=
new
Test();
//
step 1
주: 기본 클래스 초기 화 와 < clinit > 에 관 한 세부 사항 을 생략 하 였 습 니 다.
c. 상기 단계 에서 new 트리거 Test 류 의 실례 화 (대상 생 성) 는 먼저 더미 에 메모 리 를 분배 한 다음 에 대상 변 수 를 초기 값 으로 설정 한 다음 에 < init > 를 호출 합 니 다. 세부 사항 은 생략 합 니 다. 쉽게 말 하면 구조 방법의 호출 을 초래 할 수 있 습 니 다. 즉,:
Java code
public
Test(){
//
step 4
count1
++
; count2
++
; System.out.println(
""
+
count1
+
count2); }
이 때 count 1 과 count 2 는 초기 화 되 지 않 았 고 기본 값 0 (링크 준비 단계) 으로 간단하게 설정 되 었 음 이 분명 합 니 다.그래서 인쇄 된 값 은 항상 11 입 니 다.
d. 다음 에 계속 성명 순서에 따라 초기 화 를 실행 합 니 다. 즉,:
Java code
private
static
int
count1;
//
step 2
private
static
int
count2
=
2
;
//
step 3
e. 초기 화 완료 후 초기 클래스 의 로드 가 완료 되 었 습 니 다. main 방법 으로 이동 하여 실행 합 니 다.
그래서 순서 가 14253 이 고 count 2 와 count 1 이 얼마 든 인쇄 된 것 은 항상 11 이다.순 서 를 바 꾸 면, 예 를 들 면...
Java code
count
2
=
2
;
new
test();
그러면 인쇄 결 과 는 13 입 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.