Java 클래스 생성자

생성자는 무조건!!! 클래스와 이름이 같아야 한다 void 타입도 적으면 안돼


#한번에 생성자 생성 하는 방법
Source => Generate Constructor field 선택



#생성자

생성자 메소드 이름이 클래스와 같아야한다.
리턴 타입이 반드시 없어야 한다. (*void도 없어야한다.)

public class Car {
Car(){ // default 생성자 : parameter가 없음
default 생성자의 접근 제한자는 클래스 선언 형태를 따른다.
             이경우에는 Car 클래스가 public 이니까 생성자도 public이다.

}
Car(int a){ //파라미터 있는 생성자 조건 2개만 만족하면 무조건 생성자
생성자 메소드 이름이 클래스와 같아야하고, 리턴 타입이 없어야한다
}
void Car(){ //리턴타입(void 포함) 있으면 생성자가 아니다.

}
car(){ //대소문자 달라도 생성자 아니다

}
}

초기화 작업을 수행한다.
객체를 생성하면 알아서 호출된다.
만약 생성자를 적지 않아도 컴파일러가 default 생성자를 자동으로 하나 넣어준다.
생성자를 계속 추가하면서 만들 수 있다.


//default 생성자가 아닌경우에는

//parameter 있는 생성자
    Car(int num){
        this.num=num; //prarmether가 우선순위가 잴 높아서 그냥 적으면 되는데 field 는 this 로 구분을 해주어야 한다.
    }

Car(int number){
     num=number; //이름을 바꾸면 this를 안적어도 괜찮지만 변수 이름이 많아지면 복잡해지기 때문에 보통은
this를 붙여서 맞춰 쓴다.
    }


//객체 생성

Car c1 = new Car(1234);



#생성자 기본 구조

//default 생성자
int num;
String model;
String owneer;


    public Car() { //2가지 조건이 다 충족한다 default 생성자
        System.out.println("Car 생성자");
    }

    // parameter 있는 생성자
    public Car(int num) {
        this.num = num; //this.num <- 클래스 안에 있는 num을 지정하고 싶어서 사용한다.
    }
//prarmether가 우선순위가 잴 높아서 그냥 적으면 되는데 field 는 this 로 구분을 해주어야 한다.

this 변수를 사용하기 싫으면
Car(int number){
    num=number; //이름을 바꾸면 this를 안적어도 괜찮지만 변수 이름이 많아지면 복잡해지기 때문에
보통은 this를 붙여서 맞춰 쓴다.
}


    public Car(int num, String model) {
        this.num = num;
        this.model = model;
    }

    public Car(int num, String model, String owner) {
        this.num = num;
        this.model = model;
        this.owner = owner;
    }

Car c1=new Car(); //default 생성자가 호출된다.
    Car c2=new Car(4); // public Car(int num) 생성자가 호출된다. 그래서 4을 넘겨주면 4가 num에 저장된다.
    Car c3=new Car(5,"BMW"); // public Car(int num, String model) 생성자가 호출된다
    Car c4=new Car(6,"HUN","MIN"); //쓰고 싶은 생성자를 이용한다.



#생성자가 여러개 있는 경우에 하는 일이 겹칠때 this() 메소드

this():생성자 안에서만 사용이 가능하다. =>생성자안에서 사용되면서 다른 생성자를 호출함


int num; String model;

String owner;


Car() {
        //num=0;
this(0); //parameter 개수랑 타입을 보고 어느 생성자를 호출할지 결정한다.
    
    }


public Car(int num) {
        //this.num = num;
this(num,"xyz"); //모자른 parameter 개수를 채우기 위해 쓰레기값 넣어줌
}


    public Car(int num, String model) {
        //this.num = num;
        //this.model = model;
this(num,model,"anonymous");
    }


    public Car(int num, String model, String owner) {
        this.num = num;
        this.model = model;
        this.owner = owner;
    }

//이런 경우에 num이 계속 겹친다.
그럼 똑같은 일을 하는 다른 생성자 한테 일을 넘긴다



=====================================================================================================

public class CarUser{

Car c1 = new Car();
//Car c1 =new Car(1);
//Car c2 =
    System.out.println(c1.num +" "+ c1.model+" "+c1.owner);

만약 이런식으로 호출을 하면
default 생성자에서 this() 함수로 같은 일을 하는 생성자가 있는지 찾아본다.

public Car(int num) {
       //this.num = num;
this(num,"xyz"); //모자른 parameter 개수를 채우기 위해 쓰레기값 넣어줌
}

그럼 이런식으로 기본생성자 일도 하면서 num 변수에 값을 설정하는 생성자에게 일을 넘긴다
....


이런식으로 계속 넘기다보면 더 넘길수 없는 생성자가 나오는데 이제 그 생성자를 불러서 값을 초기화 시켜준다

public Car(int num, String model, String owner) {
this.num = num;
this.model = model;
this.owner = owner;

}

}

출력값 : 0 xyz anonymous







+ Recent posts