생성자
인스턴스(객체 iv묶음) 초기화 메서드 입니다
1.생성자의 이름은 클래스의 이름과 같아야 합니다
2.생성자는 리턴 값이 없습니다(void 가 안붙습니다.)(모든 클래스는 반드시 생성자를 가져야 합니다.)
3. 생성자도 오버로딩이 가능하므로 하나의 클래스에 여러개의 생성자가 존재할 수 있습니다.
Time t = new Time();
t.hour =12;
t.minute=34;
t. second=56;
time = new Time(12,34,56);//생성자로 이렇게
기본 생성자
지금까지는 생성자를 모르고도 프로그래밍을 해 왔지만 사실 모든 클래스에는 반드시 하나 이상의 생성자가 정의되어 있어야 합니다 그러나 지금까지 클래스에 생성자를 정의하지 않고도 인스턴스를 생성할 수 있었던 이유는
컴파일러가 제공하는 '기본 생성자' 덕분입니다.
클래스 이름(){}
Card(){}//직접 작성
매개변수도 없고 특별히 인스턴스 초기화 작업이 요구되어지지않는다면 생성자를 정의하지 않고 컴파일러가 제공하는
기본 생성자를 사용하는 것도 좋습니다.
class ConstructorTest{
public static void main(String[] args){
Data1 d1 = new Data1();
Data2 d2 = new Data2();//기본 생성자 호출 //컴파일러 에러 발생 이름을 이해할수 없다고 뜹니다.
/*Data1에는 정의되어 있는 생성자가 하나도 없으므로 컴파일러가 기본 생성자를 추가해주었지만
* Data2에는 이미 생성자 Data2(int)가 정의되어 있으므로 기본 생성자가 추가되지 않았기 때문입니다,*/
}
}
매개변수 있는 생성자
인스턴스를 생성한 다음에 인스턴스 변수의 값을 변경하는 것보다 매개변수를 갖는 생성자를 사용하는 것이 코드를 보다 간결하고 직관적으로 만듭니다.
class Car{
String color;
String gearType;
int door;
// 생성자
Car(){};
// 매개변수가 있는 생성자
Car(String c, String g, ing d){
color = c;
gearType = g;
door = d;
}
}
// 비효율적
Car c = new Car();
c.color = "white";
c.gearType = "auto";
c.door = 4;
// 효율적
Car c = new Car("white", "auto", 4);
생성자에서 다른 생성자 호출하기 -this() , this
생성자의 이름으로 클래스이름 대신 this를 사용합니다
한생성자에서 다른 생성자를 호출할 때는 반드시 첫 줄에서만 호출이 가능합니다.
this 는 참조 변수로 인스턴스 자신을 가르킵니다.(지역변수(iv)와 인스턴스iv를 구별할때 사용합니다) ( iv는 인스턴스 변수)
this를 사용할수 있는 것은 인스턴스멤버뿐입니다.
this 인스턴스 자신을 가르키는 참조변수,인스턴스의 주소가 저장되어 있습니다. 모든 인스턴스메서드에 지역변수로 숨겨진 채로 존재합니다.
this(),tihs(매개변수) 생성자, 같은 클래스의 다른생성자를 호출할 때 사용합니다
this,this() 는 완전 다른 것입니다.
tihs 는 '참조변수' this()는 '생성자'
'JAVA > 객체지향' 카테고리의 다른 글
상속 (0) | 2023.02.23 |
---|---|
변수의 초기화 (0) | 2023.02.23 |
오버로딩 ,오버라이딩 (0) | 2023.02.22 |
클래스 메서드(static)와 인스턴스 메서드 (0) | 2023.02.22 |
기본형 매개변수와 참조형 매개변수 (0) | 2023.02.22 |