생성자
- 클래스와 이름이 같은 메서드
 
- 클래스에 생성자가 정의되어있지 않으면 컴파일러가 자동으로 추가함
 
- 반환값이 없음
 
class Car{
	Car(){}		// 생성자 메서드
    int plus() {}	//멤버메서드(메서드명이 생성자 메서드와 중복 될 수 없음)
멤버메서드와의 비교
 | 실행가능시점 | 반환타입 | 이름 | 호출 | 
|---|
| 생성자 메서드 | 객체생성직후 | 없음 | class와 같아야 함 | new연산자 | 
| 멤버 메서드 | 호출 시 | 다양함 | 비교적 자유롭게 가능 | 참조변수 | 
★ 생성자 메서드 호출
1. Car.java
public class Car {	
	public Car(){
		System.out.println("안녕하세요");
	}	
}
2. CarApp.java
public class CarApp{
	public static void main(String[]args) {
	new Car();
    }
}
-> 안녕하세요가 출력됨
★ 멤버메서드 호출
1. Car.java
public class Car {	
	void example(){
    	System.out.println("안녕하세요");
	}	
}
2. CarApp.java
public class CarApp{
	public static void main(String[]args) {
		Car car = new Car();	// 참조변수 필요
		car.example();
}
-> 안녕하세요가 출력됨
매개변수가 있는 생성자
- 인스턴스 생성과 동시에 원하는 값으로 초기화 가능
 
매개변수가 없는 생성자 
1. Car.java
class Car{
	String color;
    Car(){}
2. CarApp.java
public class CarApp {
	public static void main(String[]args) {	
		Car car = new Car();
		car.color = "White";		
	}
}
매개변수가 있는 생성자
1. Car.java
class Car{
	String color;
	Car(String c){}
2. CarApp.java
public class CarApp {
	public static void main(String[]args) {	
		new Car("White");		
	}
}
- 한개라도 생성 될 시, 자동생성되는 생성자는 생성되지 않으므로 매개변수가 없는 생성자가 필요할 경우에는 따로 정의해야함
 
1.
class Product{
int x;
}
보이진 않지만 자동으로 생성자 Product(){}가 이미 정의되어 있음
2.
class Product{
int x;
new Product(int x){}
}
생성자가 이미 정의됐으므로 1의 Product(){}는 생성되지 않음
따라서 매개변수가 없는 생성자가 필요하면 아래와 같이 따로 정의 해야함
3.
class Product(){
int x;
Product(){}
Product(int x){}
}
this의 활용
- 객체 생성시 자동 생성되는 변수
 
- 스스로의 주소값을 갖고 잇음
 
- 다른 생성자 호출 시 반드시 첫 줄에서만 가능
 
public class Car{
  String model;
  String gear;
  int door;
      Car(String model, String gear, int door){
        this.model = model;
        this.gear = gear;
        this.door = door;
      }
  }