자바 클래스 의 변수 초기 화
public class Test {
int a;
static int b = 123;
final static int c;
void init(){
int d;
}
public static void main(String[] args) {
int e;
System.out.println(e);
}
}
위의 Test 클래스 에서 5 개의 서로 다른 유형의 변 수 를 정 의 했 습 니 다. 그러면 이 변 수 는 어떻게 초기 화 됩 니까?먼저 한 가지 성명 을 해 야 한다. 상술 한 코드 는 문제 가 있어 서 컴 파일 이 통과 되 지 않 는 다.
먼저 자바 에서 변수 에 대한 유형 을 명 확 히 하 겠 습 니 다. 자바 에는 세 가지 변수 유형, 클래스 변수, 인 스 턴 스 변수, 부분 변수 가 있 습 니 다.부분 변수의 생명 주 기 는 부분 변수 방법 을 설명 하 는 성명 주기 와 같 습 니 다. 방법 이 호출 될 때 만 부분 변 수 를 만 들 고 방법 집행 이 끝나 면 부분 변 수 를 소각 합 니 다.
클래스 변수의 초기 화 는 두 단계 로 나 뉜 다.첫 번 째 는 클래스 로 딩 준비 단계 입 니 다.준비 단 계 는 클래스 변수 에 정식으로 메모 리 를 할당 하고 클래스 변수의 초기 값 을 설정 합 니 다.클래스 변수 가 기본 데이터 형식 이 라면 초기 값 은 대응 하 는 초기 값 입 니 다. 대상 형식 이 라면 초기 값 은 null 이 고 아래 코드 를 실행 하면 결 과 는 null, 0 입 니 다.
public class Test {
static Integer b;
static int c;
public static void main(String[] args) {
System.out.println(b+","+c);
}
}
준비 단계 에 또 하나의 예외 상황 이 있 습 니 다. 만약 에 클래스 변수 가 final 키워드 에 의 해 동시에 수식 되면 준비 단 계 는 변 수 를 직접 할당 합 니 다.다음 코드 에서 c 의 값 은 준비 단계 에서 123 으로 직접 할당 합 니 다.
public class Test {
final static int c = 123;
public static void main(String[] args) {
System.out.println(c);
}
}
final 키워드 에 수식 되 지 않 은 클래스 변수 에 대해 할당 과정 은 클래스 로드 과정 에서 초기 화 단계 입 니 다.실례 변 수 는 대상 이 실례 화 될 때 대상 과 함께 자바 더미 에 분 배 됩 니 다.한편, 클래스 변 수 는 클래스 로 딩 과정 에서 쌓 인 논리 적 구분 인 방법 구역 에 분 배 됩 니 다.
글 의 첫 번 째 예 로 돌아 가면 인 스 턴 스 변수 a 와 클래스 변수 b 의 분 배 는 위 에서 말 한 것 처럼 초기 화 됩 니 다. 상수 c 는 준비 단계 에서 직접 할당 되 고 여기 서 c 에 대한 할당 이 없 기 때문에 컴 파일 오류 가 발생 합 니 다.부분 변수 d 는 방법 init 의 호출 에 따라 스 택 에 분 배 됩 니 다. 부분 변수 e 의 정 의 는 문제 가 없 지만 할당 되 지 않 은 부분 변 수 는 접근 할 수 없습니다.
사실 여기 에는 작은 디 테 일이 있 습 니 다. 국부 변수 가 생 성 된 후에 사용 되 지 않 으 면 컴 파일 러 는 이 변수의 정 의 를 무시 하고 컴 파일 된 class 파일 을 볼 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.