1. 생성자 this()
- 생성자에서 다른 생정자 호출할 때 사용
- 다른 생성자 호출시 첫 줄에서만 사용가능
class Car2 {
String color; //색상
String gearType; //변속기 종류 - auto(자동), manual(수동)
int door; // 문의 개수
Car2() {
this("white","auto",4);
}
Car2(String color) {
this(color, "auto",4);
Car2(String color, String gearType, int door) {
this.color = color;
this.gearType = gearType;
this.door = door;
}
}
2. 참조변수 this
- 인스턴스 자신을 가리키는 참조변수
- 인스턴스 메서드(생성자 포함)에서 사용가능
- 지역변수 (lv)와 인스턴스 변수(iv)를 구별할 때 사용
Car(String c, String g, int d) {
// color는 iv , c는 lv
color = c;
gearType = g;
door = d;
}
-> this 생략 가능 (같은 클래스 내에서)
Car(String color, String gearType , int door) {
// this.color는 iv , color lv
this. color = color;
this. gearType = gearType;
this. door = door;
}
-> iv, lv 구별 해야 되기 때문에 this 생략 불가
this : 인스턴스 자신을 가리키는 참조변수, 인스턴스의 주소가 저장되어 있다.
모든 인스턴스메서드에 지역변수로 숨겨진 채로 존재한다.
this(), this(매개변수) : 생성자, 같은 클래스의 다른 생성자를 호출할 때 사용한다.
3. 변수의 초기화
- 지역변수(lv)는 수동 초기화(-> 우리가 직접 초기화) 해야함 (사용전 꼭!!!)
- 멤버변수(iv, cv)는 자동 초기화된다.
class InitTest {
int x; // 인스턴스 변수
int y = x; // 인스턴스 변수
void method1() {
int i; // 지역 변수
int j = i; // 에러. 지역변수를 초기화하지 않고 사용
}
}
4. 멤버변수의 초기화
1) 명시적 초기화 (=)
class Car {
int door = 4; // 기본형(primitive type) 변수의 초기화
Engine e = new Engine(); // 참조형(reference type) 변수의 초기화
2) 초기화 블럭
인스턴스 (iv) 초기화 블럭 : { }
클래스 (cv) 초기화 블럭 : static { }
3) 생성자
Car (String color, String gearType, int door) { // 매개변수있는 생성자
this. color = color;
this. gearType = gearType;
this. door = door;
멤버변수의 초기화 - static { }
1) 명시적 초기화 (=)
2) 초기화 블럭 - { }, static { }
3) 생성자(iv 초기화)
class StaticBlockTest {
static int[] arr = new int[10]; // 명시적 초기화
static { // 클래스 초기화 블럭 - 배열 arr을 난수로 채운다.
for (int i =0; i<arr.length; i++) {
arr[i] = (int)(Math.random()*10)+1;
}
}
멤버변수의 초기화
- 클래스 변수 초기화 시점: 클래스가 처음(메모리에 올라갈 때) 로딩될 때 단 한번
- 인스턴스 변수 초기화 시점: 인스턴스가 생설될 때 마다
class InitTest {
static int cv = 1; // 명시적 초기화
int iv = 1; // 명시적 초기화
static { cv = 2; } // 클래스 초기화 블럭
{ iv = 2; } // 인스턴스 초기화 블럭
InitTest() { // 생성자
iv = 3;
}
}
InitTest it = new InitTest(); // 복잡 초기화
초기화 순서 : 1. cv -> iv
2. 자동(0) -> 간단(=) -> 복잡
클래스 초기화 | 인스턴스 초기화 | |||||
기본값 | 명시적 초기화 | 클래스 초기화블럭 | 기본값 | 명시적 초기화 | 인스턴스 초기화 블럭 | 생성자 |
cv 0 자동 |
cv 1 간단(=) |
cv 2 복잡(static {} ) |
cv 2 iv 0 |
cv 2 iv 1 |
cv 2 iv 2 |
cv 2 iv 3 |
1 | 2 | 3 | 4 | 5 | 6 | 7 |
'JAVA' 카테고리의 다른 글
JAVA 문자열 자르기(Substring,split,tokenizer) 예제 (0) | 2021.08.05 |
---|---|
JAVA #24 인터페이스와 다형성 (0) | 2021.07.12 |
JAVA #22 오버로딩(overloading), 생성자(constructor) (0) | 2021.07.07 |
JAVA #21 static 메서드와 인스턴스 메서드 (0) | 2021.07.05 |
JAVA #20 호출 스텍(call stack) , 기본형 매개변수 (0) | 2021.07.03 |