생성자(Constructor)
new 연산자와 같이 사용되며 객체 생성할 때 호출
자바의 모든 클래스는 생성자가 반드시 존재하며, 하나 이상 가질 수 있다.
생성자는 클래스명과 동일하며, 리턴 타입이 존재하지 않는다.
생성자를 정의하지 않는 경우, 컴파일시 디폴트 생성자가 추가된다.
생성자는 일반 메소드 처럼 호출할 수 없고 반환 타입이 없다.
생성자는 new 연산자 다음에 호출되며, 객체를 생성하고 초기화 작업을 담당
※ 생성자에 인자(매개변수)가 있을 경우 객체 생성시 인자 또한 입력해야 한다.
객체 생성 순서
1) new 연산자에 의해서 객체의 메모리가 할당
: a필드가 heap 메모리 공간에 메모리 할당을 받는다.
2) a필드는 디폴트 값(0)으로 초기화 된다.
3) 생성자 몸체를 실행하여 a 필드는 10으로 초기화가 된다.
생성자 몸체는 객체가 생성될 때 단 한번만 실행된다.(객체하나당 한번씩 실행)
필드와 지역변수(매개변수)명이 동일하면 지역변수(매개변수)가 우선순위가 높다.
this : 호출한 객체
인스턴스 변수(객체 필드)를 명확하게 접근하기 위해서 this 키워드를 사용
생성자에서 중복 정의된 다른 생성자를 호출하기 위해 사용한다.
static 키워드가 있는 곳(클래스 메소드, 클래스 변수)은 객체 생성을 안하므로 this를 쓸 수 없다.
클래스가 로딩될 때 한번 실행
* 1) 클래스 변수 메모리 할당(메소드 영역) : x, y
* 2) 클래스 변수를 디폴트 값으로 초기화 : x=0, y=0
* 3) 초기화 수식 실행 : x=10
* 4) static 초기화 블럭이 있으면 static 초기화 블럭을 실행
객체를 생성할 때마다 실행
* 1) new Test9(); -> 객체를 위한 메모리 할당(인스턴스 변수의 메모리 할당) : a,b,c,d 메모리 할당
* a,b,c,d
* 2) 모든 인스턴스 변수는 디폴트 값으로 초기화 a=0, b=0, c=0, d=0
* 3) 초기화 수식이 있으면 초기화 수식으로 초기화 : b=1
* 4) 인스턴스 초기화 블럭이 있으면 초기화 블럭 실행해서 초기화 작업
5) 생성자 몸체를 실행
* (1) 생성자 몸체의 super([인수]); 또는 this([인수]) 실행
* (2) 생성자 몸체 실행
Garbage Collector
힙영역에 할당된 메모리가 더 이상 사용 안할 경우 jvm이 객체 소멸시킴
method 영역 : 클래스 변수
heap 영역 : 인스턴스 변수
stack : 매개변수
final 변수(상수)
반드시 초기화가 필요
한번만 초기화 되며 값을 변경할 수 없음
'Study > 쌍용' 카테고리의 다른 글
자바 상속 & super (0) | 2022.07.25 |
---|---|
자바 기본 API 클래스(2) (0) | 2022.07.23 |
자바 기본 API 클래스(1) (0) | 2022.07.22 |
자바 객체지향(2) (0) | 2022.07.20 |
자바 객체지향(1) (0) | 2022.07.18 |