public class Start3 {
public static void main(String[] args) {
int i = 10;
int k = 20;
if (i == 10) {
int m = k + 5;
k = m;
} else {
int p = k + 10;
k = p;
}
//int nn = m + p // m, p는 if문 안에서 선언된 변수이므로 사용 불가능
}
}
- int k = 20 ; 까지 실행된 경우
- T 메모리 구조 ( 클래스 메타 데이터 적재 )
- main 메서드 실행 ⇒ 스택메모리 적재
- main 메서드이 args 인자가 main 프레임에 쌓인다.
- int i 가 10으로 초기화되며, (10 의 값을 상수풀에서 가져와서 i 에 10을 대입)
- if ( i == 10 )
- i == 10 은 true
- { : 의 경우 중괄호가 열린경우 스택 프레임이 생성됩니다.
- int m = k+5
- k 는 if 블록 스택의 입장에서 이미 아래에 깔린 변수이기에, 가져다가 사용할 수 있습니다.
- k == 20 + 5 의 연산값인 25을 이용해 m 을 초기화합니다.
- 닫는 중괄호는 if 블록 스택 영역을 스택 영역에서 제거
public class Start3 {
public static void main(String[] args) {
int i = 10;
int k = 20;
if (i == 10) {
int m = k + 5;
k = m;
} else {
int p = k + 10;
k = p;
}
//int nn = m + p // m, p는 if문 안에서 선언된 변수이므로 사용 불가능
}
}
- // int nn = m + p ; 가 주석이 해제된다면
- if 블록 스택 안에 지역변수
- m
- p
가 존재했지만, if 블록의
닫는 중괄호
로 인하여 스택 프레임이 소멸하였다.고로, 해당 지역변수는 이제 사용이 불가능한 것입니다.
Uploaded by N2T
'자바 > 스프링입문객체지향' 카테고리의 다른 글
메서드 호출과 메모리: 메서드 스택 프레임2 (0) | 2023.08.17 |
---|---|
지역 변수와 메모리 : 스택 프레임에 갇혔어요! (0) | 2023.08.17 |
변수와 메모리 (0) | 2023.08.17 |
main 메서드 동작 방식 (0) | 2023.08.17 |
자바에 존재 하는 절차적 구조적/프로그래밍의 유산 (0) | 2023.08.17 |