면접 그런 거.
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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
LintCode - 순차적으로 숫자를 인쇄합니다.1에서 최대 N까지의 정수를 반복하는 방법으로 찾습니다. 예제 제시N = 1, 반환[1,2,3,4,5,6,7,8,9]. 제시N = 2, 반환[1,2,3,4,5,6,7,8,9,10,11,...,99]. 주의 다음과 같...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.