public class Start4 {
public static void main(String[] args) {
int k = 5;
int m;
m = square(k);
}
private static int square(int k) {
int result;
k = 25;
result = k;
return result;
}
}
JRE의 동작:
main()
메서드가 있는지 확인한다.
main()
메서드를 발견한다.main()
메서드의 존재가 확인되면 JVM에 전원을 넣어 부팅한다.JVM의 동작 :
JRE에게 목적 파일을 전달받아 실행한다.
전처리를 한다.
목적 파일 내에 있는 모든 Class와 import package를 스태틱 영역에 배치한다.
m = square(k);
를 실행한다.
9번째 줄로 이동하여 square()
메서드 스택 프레임을 생성한다.
k = 25;
를 실행한다.
result = k;
를 실행한다
square()
메서드에서 지역변수 result
를 리턴한 후, 닫는 중괄호 }
를 만나서 square() 스택 프레임을 소멸시킨다.
main()
메서드의 닫는 중괄호 }
를 만나서 main()
스택 프레임을 소멸 시킨다.
JRE는 JVM을 종료하고 JRE 자체도 운영체제 상의 메모리에서 사라진다.
main() 메서드의 어디에선가 square() 메서드 내의 지역 변수 result에 직접 접근할 수 있을까?
반대로 square() 메서드 어디에선가 main() 메서드 내의 지역 변수 m에 직접 접근할 수 있을까?
답 : 절대 접근할 수 없다.