✍
public class Ex3 {
int b = check(2);
static int a = check(1);
public static int check(int i) {
System.out.println("call : " + i);
return i;
}
public static void main(String[] args) { // 메인 메서드
System.out.println("main() 메서드");
System.out.println("main() 메서드");
Ex3 ex = new Ex3();
}
static int c = check(3);
}
<메모리 할당 순서>
1. 클래스가 메모리에 로딩
2. static 키워드가 선언된 모든 멤버(변수 및 메서드)가 메모리에 로딩된다.
3. static 키워드가 선언된 멤버변수 a, c를 로딩하기 위해서
우변의 check() 메서드가 실행되어야 하므로 check() 메서드가 호출
--> 이때, check() 메서드도 static 메서드 이므로 메모리에 로딩된 상태
--> a와 c중 더 윗쪽에 작성된 코드부터 차례대로 실행된다.
1) static int a 가 로딩되기 때문에 check(1)이 호출되어 "call : 1" 출력됨
2) static int c 가 로딩되기 때문에 check(3)이 호출되어 "call : 3" 출력됨
4. 모든 static 멤버의 로딩이 끝난 후 main() 메서드가 자동으로 호출됨 (프로그램 시작점)
--> "main() 메서드" 출력됨
5. main() 메서드 내에서 Ex3 클래스의 인스턴스가 생성됨
--> 인스턴스 생성 시 인스턴스 멤버변수 int b 가 메모리에 로딩됨
이때, int b의 값 할당을 위해 check(2) 메서드가 호출되므로 "call : 2" 출력됨
'개발 > Java' 카테고리의 다른 글
[Java] 객체지향으로 문제풀기 (0) | 2023.01.31 |
---|---|
[Java] 싱글톤(singleton) (0) | 2023.01.31 |
[Java] 자바 프로그램 실행 과정과 static (0) | 2023.01.31 |
[Java] static (0) | 2023.01.29 |
[Java] import문 (0) | 2023.01.28 |