위 코드는 어떤 순서로 실행될까?
멤버 변수의 초기화 시기와 순서는 다음과 같다.
초기화 시기
1. 클래스 : 클래스가 처음 로드될 때 한 번 초기화.
2. 인스턴스 : 새로운 인스턴스가 생성될 때마다 각각의 인스턴스가 초기화.
초기화 순서
1. 클래스 변수의 기본값 ( ex > static int num; ) => int의 기본값은 0이다.
2. 클래스 변수의 명시적 초기화 ( ex > static int num = 10; )
3. 클래스 초기화 블럭 ( ex > static { num = 20; } )
4. 인스턴스 변수의 기본값 ( ex > String title; ) => String의 기본값은 null이다.(참조형 변수)
5. 인스턴스 변수의 명시적 초기화 ( ex > String title = "나는 제목이다" )
6. 인스턴스 초기화 블럭 ( ex > { title = "난 사실 제목 아니다" } )
7. 인스턴스 생성자 ( ex > DOC(String title) { this.title = title } )
* 단순히 클래스랑 인스턴스가 종류가 달라서 이렇게 나열한 것이 아니라 멤버 변수는 늘 클래스가 먼저 초기화되고 그 다음 인스턴스가 초기화된다.
위의 내용을 숙지하고 결과를 보도록 하자.
1. 늘 클래스가 먼저 초기화되기 때문에 제일 먼저 "접속!"이 출력되고 있다.
2. 그 후 인스턴스가 생성될 때마다 초기화되며 "ready.."가 출력되고 있다.
3. 기본적으로 extension은 명시적 초기화가 되어있지 않기 때문에 초기화 블럭에 있는 ".txt"가 대입되어 있으나 초기화 블럭보다 생성자가 더 나중에 초기화되므로 생성자에서 직접적으로 extension 값을 정해주면 해당 값이 적용된다.
4. 제목 없음 뒤에 붙어있는 count는 클래스 변수이기 때문에 처음에 값을 명시적으로 정해준 이후 초기화되지 않고 count++에 의해 인스턴스가 생성될 때마다 값이 증가하고 있다.
'Language & Framework > Java' 카테고리의 다른 글
JAVA 접근 제어자의 활용 예제 (0) | 2022.06.05 |
---|---|
자바의 특성 단일상속, 그리고 단점 보완하기. (0) | 2022.06.04 |
자바 재귀 호출은 무엇인가? : factorial, 거듭제곱의 합 구하기 (0) | 2022.06.02 |
자바 2차원 배열 : 빙고, 행렬 곱셈, 단어 퀴즈 (0) | 2022.06.01 |
자바 배열 : 정렬하기(sort), 값 카운트하기 (0) | 2022.05.31 |