public class Start2 {
public static void main(String[] args) {
int i;
i = 10;
double d = 20.0;
}
}
- public static void main(String[] args) {
- { 이후에 스택영역에 main 스택 프레임이 생성된다.
- args 라는 메서드 인자가 프레임에 로드된다.
- int i; 의 실행
- int i 는 4바이트 크기의 변수이다.
- main 메서드 안에서 선언되었기에, main 스택 프레임 안에서 args 위에 i 변수가 초기화되지 않은 상태로 적재됨.
Q. 컴파일러는 i 를 선언만하고 초기화하지 않은 상태에서 i 변수를 사용하는 코드를 만나는 경우에는 자바 컴파일러(Javac) 는
"The local variable i may not have been initialized "경고를 토해내며 파업에 들어간다고 한다.
어떻게 실행 전에 i 가 잘못되었다는 걸 ide 에서 인지할 수 있는지 궁금합니다. 자바는 스크립트 언어도 아니라 컴파일전까지는 실제 실행되는 바이트코드를 인지할 수 없는 상태 아닌가요?
- i 를 10으로 초기화.
- 변수 i 에 10이라는 값으로 초기화된다.
- main 메서드의 프레임안에 i 스택 공간안에
10
이라는 리터럴 값이 들어가는 것이다.
- 그렇다면 이
10
이라는 값 자체는 어디에서 오게 되는것일까?- 리터럴의 경우 상수 풀이라는 영역에 이미 저장된 값을 자체를 불러온다.
- 이때, 상수풀은
Java
의 벤더사마다 버전마다 다르다고 한다- 힙영역 혹은 정적(클래스) 영역 이 될 수 있다.
Uploaded by N2T
'자바 > 스프링입문객체지향' 카테고리의 다른 글
지역 변수와 메모리 : 스택 프레임에 갇혔어요! (0) | 2023.08.17 |
---|---|
블록 구문과 메모리 : 블록 스택 프레임 (0) | 2023.08.17 |
main 메서드 동작 방식 (0) | 2023.08.17 |
자바에 존재 하는 절차적 구조적/프로그래밍의 유산 (0) | 2023.08.17 |
자바 프로그램의 개발과 구동 (0) | 2023.08.17 |