생성자의 이름은 클래스 이름과 같다. 일반 메소드와 다른점은 생성사는 반환값을 가지지 않는다.

생성자는 주로 필드에 초기값을 부여할 때 많이 사용되지만 특별한 초기화 절차를 수행할 수 있다.

<aside> 💡 생성자도 메소드이기 때문에 메소드 오버로딩을 사용할 수 있음

</aside>

예제 1번

package ex04;

class Pizza {
    int size;
    String type;

    public Pizza() {
        size = 12;
        type = "슈퍼슈프림";
    }

    public Pizza(int s, String t) {
        size = s;
        type = t;
    }
}

public class PizzaTest {
    public static void main(String[] args) {
        Pizza obj1 = new Pizza();
        System.out.println("(" + obj1.type+ ", " + obj1.size + ")");

        Pizza obj2 = new Pizza(24, "포테이토");
        System.out.println("(" + obj2.type + ", " + obj2.size + ")");
    }
}

위의 코드에서 생성자는 Pizza()와 Pizza(int s, String t)이다.

생성자를 사용자가 만들지 않았다면 자동으로 기본 생성자를 만들어서 모든 멤버 변수들을

기본값으로 초기화함

예제

package ex04;

class Box2 {
    //이자리에 기본 생성자가 생성됨
    int width, height, depth;
}

public class BoxTeat {
    public static void main(String[] args) {
        Box2 b = new Box2();
        System.out.println(b.width + " " + b.height + " " + b.depth);
    }
}
//0 0 0

만약 생성자를 사용자가 추가 하였을 경우에는 이미 생성자가 존재하기 때문에

컴파일러가 기본 생성자를 추가하여 주지 않음

package ex04;

class Box2 {
    //이자리에 기본 생성자가 생성됨
    int width, height, depth;

		//사용자 정의 생성자
    public Box2(int w, int h, int d) {
        width = w;
        height = h;
        depth = d;
    }
}

public class BoxTeat {
    public static void main(String[] args) {
        Box2 b = new Box2(); //오류
        System.out.println(b.width + " " + b.height + " " + b.depth);
    }
}

this 참조 변수