안녕하세요 오늘은 9번째 개발일지
생성자 부터 변수까지 알아보겠습니다.
-생성자의 이름은 클래스의 이름과 같아야한다
-생성자는 리턴 값이 없다.
연산자 new 가 인스턴스를 생성하는거지 생성자가 인스턴스를생성하는 것이 아니다.
1-1. 기본생성자
생성자를 모르고도 프로그래밍을 해 왔지만 , 사실은 모든 클래스에는 반드시 하나 이상의
생성자가 정의 되어있어야한다.
하지만 클래스에 생성자 정의를 하지않고도 인스턴스를 생성할 수 있었던 이유는
기본생성자 덕분이다.
컴파일러가 자동적으로 기본 생성자를 추가해주는 경우는 클래스 내에 생성자가
하나도 없을때 이다. 만약 하나라도 있을시에는 생성 되지 않는다.
1-2. 생성자에서 다른 생성자 호출하기 -this(), this
-같은 클래스의 맴버들 간에 서로 호출할 수 있는 것처럼 생성자 간에도서로 호출이 가능하다.
하지만 밑에 두가지 조건을 충족 시켜야한다.
package 삼월이십이일;
class Car{
String color;
String gearType ;
int door;
Car(){
this("white", "auto", 4);
}
Car(String color) {
this(color,"auto", 4);
}
Car(String color, String gearType, int door){
this.color = color;
this.gearType = gearType;
this.door = door;
}
}
class CarTest2{
public static void main(String args[]){
Car c1 = new Car();
Car c2 = new Car("blue");
System.out.println("c1의 color =" + c1.color +", gear Type=" + c1.gearType +"door="+c1.door);
System.out.println("c2의 color =" + c2.color +", gear Type=" + c2.gearType +"door="+c2.door);
}
}
생성자 Car() 에서 또다른 생성자 Car(String color, String gearType, int door)를 호출하였다.
이처럼 생성자간의 호출에서는 생성자의이름대신 'this ' 를 사용해야만 하므로
'Car' eotls 'this'를 사용했다. 그리고 Car() 의 첫째 줄에서 호출하였다는점을
눈여겨 보세요.
this - 인스턴스 자신을 가르키는 참조변수, 인스턴스의 주소가 저장되어 있다.
모든 인스턴스 메서드에 지역변수로 숨겨진 채로 존재한다.
this(), this(매개변수) - 생성자, 같은 클래스의 다른 생성자를 호출할 때 사용한다
2-1. 명시적 초기화
2-2. 초기화 블럭
초기화 블럭에는 '클래스 초기화 블럭' 과 '인스턴스 초기화 블럭' 두가지
종류가 있다. 클래스 초기화 블럭은 클래스변수의 초기화에 사용되고 ,
인스턴스 초기화 블럭은 인스턴스 변수의 초기화에 사용된다.
클래스 초기화 블럭 = 클래스변수의 복잡한 초기화에 사용된다.
인스턴스 초기화 블럭 = 인스턴스변수의 복잡한 초기화에 사용된다.
class InitBlock {
static { /* 클래스 초기화 블럭입니다. */}
{/* 인스턴스 초기화 블럭입니다 */}
}
클래스 초기화 블럭은 클래스가 메모리에 처음 로딩될때 한번만 수행되며,
인스턴스 초기화 블럭은 생성자와 같이 인스턴스를 생성할 때마다 수행한다.
생성자보다인스턴스 초기화 블럭이 먼저 수행된다.
2-3. 맴버변수의 초기화 시기와 순수
클래스 변수의 초기화 시점
인스턴스변수의 초기화 시점
클래스 변수의 초기화 순서
인스턴스변수의 초기화 순서