면접 그런 거.

1383 단어 면접 시험
이것은 사람을 괴롭히는 면접 문제입니다. 코드를 보십시오.
 package com.sprone.classloader1;
public class ClassLoader1 {
	public static void main(String[] args) {
		Singleton singleton = Singleton.getInstance();
		System.out.println("a= " + Singleton.a);
		System.out.println("a= " + Singleton.b);
	}
}

class Singleton {
	private static Singleton singleton = new Singleton();// code1
	public static int a;
	public static int b = 0;

	// code2
	private Singleton() {
		a++;
		b++;
	}

	public static Singleton getInstance() {
		return singleton;
	}

}
 
인쇄 결과는 무엇입니까?코드1 코드를 코드2로 잘라낸 결과는 무엇입니까?
정답:1,0 커팅 후 1,1
 
분석: 클래스의 불러오기, 링크와 초기화 과정
로드:클래스의 바이너리 데이터 찾기 및 로드
링크:검증:로드된 클래스의 정확성 확보
준비: 클래스의 정적 변수에 메모리를 할당하고 기본값인 private static int a = 3으로 초기화합니다.준비 단계 할당 내
저장 설정이 0(int 기본값)
해석
 
문제1: 대상에 대응하는 Class는 언제 생겼습니까?만약에 실행할 때 JVM의 효율이 개미와 같다면 JVM팀도 다시 실행할 때 Class 대상을 생성하지 않을 것이다. 우리가 컴파일한 후에.class 파일에서 모두 컴파일되었고 모든 대상에 대응하는 Class 대상이 있습니다. 이 Class는 바이트 코드 파일에서 해석되어 생성 대상의 인터페이스를 제공합니다. 우리가 자주 사용하는 반사 코드의 생성은 모두 컴파일할 때 생성됩니다.
 
정적 코드 블록 순서 실행 a는 값을 부여하지 않고 준비 단계에서 기본값을 부여합니다.코드1을 실행했을 때 a는 1이다.다음 코드 블록을 계속하면 뒤에 값이 없습니다. a=1이고 b는 0입니다.
잘라낸 후 new 뒤에 있는 최종 값은 구조 방법이기 때문에 모두 1

좋은 웹페이지 즐겨찾기