728x90
static 메서드 내에서는 instance 필드나, instance 메서드를 사용할 수 없다. 그 이유는 메모리에 생성되는 시점이 다르기 때문이다. 클래스 메서드는 인스턴스가 없어도 사용이 가능하지만, 인스턴스 필드는 인스턴스가 있어야만 사용이 가능하기 때문이다.
즉, 클래스 메서드가 실행되는 시점에서는 인스턴스 필드가 메모리에 없기때문에 사용할 수 없다고 컴파일 오류가 발생한다.
또한 클래스 필드는 아래와 같이 static 블록에서 초기화할 수 있다.
static int count;
static {
count = 100;
}
main method보다 먼저 실행되는 static 블록
- .java 소스를 컴파일하고 java로 실행을 하게되면, JVM은 CLASSPATH에서 해당 클래스 파일을 찾는다.
- 이 클래스를 읽어들여서 그 정보를 메모리에 올리게 된다.
- 이때, 클래스 필드나 클래스 메서드는 실행 가능한 상태가 되도록 한다.
- 그리고 static 블록이 있으면 코드가 실행이 된다. (static 필드의 값을 초기화한다.)
- JVM은 클래스 메서드 중에서 String[]을 받아들이는 main 메서드를 실행한다.
즉, 실행을 하면 static block이 먼저 출력이 되고, main 메서드가 실행이 될 수 있다.
728x90
'Language > Java' 카테고리의 다른 글
좋은 객체? 나쁜 객체? (0) | 2023.09.13 |
---|---|
자바 버전별 메모리 영역과 인스턴스 생성 (0) | 2023.09.13 |
클래스 필드(static field)에 대한 고찰 (0) | 2023.09.13 |
CLASS METHOD vs INSTANCE METHOD (0) | 2023.09.13 |
Math클래스 API (0) | 2023.09.13 |