인스턴스가 생성될 때마다 호출되는 '인스턴스 초기화 메소드'를 말한다.
//인스턴스: =객체, iv 묶음
//인스턴스 초기화 : 인스턴스 변수에 적절한 값을 저장하는 것
Card c=new Card();
//1. 연산자 new에 의해서 메모리에(Heap) Card 클래스의 인스턴스가 생성됨
//2. 생성자 Card()가 호출되어 수행됨
//3. 연산자 new의 결과로, 생성된 Card 인스턴스의 주소가 반환되어 참조변수 c에 저장됨
1) 생성자의 이름은 클래스의 이름과 같아야 한다.
클래스이름(타입변수명, 타입변수명, ... ) {
//인스턴스 생성 시 수행될 코드
//주로 인스턴스 변수의 초기화 코드를 적는다.
}
//클래스 Card와 생성자 Card의 이름이 같다
class Card {
...
Card() { //매개변수 없는 생성자
//인스턴스 초기화 작업
}
Card(String kind, int number) { //매개변수 있는 생성자
//인스턴스 초기화 작업
}
}
2) 생성자는 return 값이 없다. (void를 붙이지 않는다.)
매개변수가 없는 생성자
클래스이름() { } //기본 생성자
생성자가 하나도 없을 때만 컴파일러가 자동으로 추가해준다.
하나라도 있으면 추가되지 않는다.
클래스를 만들 때 꼭 기본 생성자를 추가해주자.
//생성자 오류나는 예시
class Data_1 {
int value;
}
class Data_2{
int value;
Data_2(int x) { //매개변수가 있는 생성자
value=x;
}
}
class Ex6_11 {
public static void main(String[] args) {
Data_1 d1=new Data_1();
Data_2 d2=new Data_2(); //컴파일 에러 발생
}
}
//생성자 오류 해결방법 : Data_2의 기본 생성자를 추가해준다.
//class Data_1도 기본 생성자가 없지만 컴파일러가 하나를 자동으로 추가해준다.
class Data_1 {
int value;
}
class Data_2{
int value;
Data_2() { }
Data_2(int x) { //매개변수가 있는 생성자
value=x;
}
}
class Ex6_11 {
public static void main(String[] args) {
Data_1 d1=new Data_1();
Data_2 d2=new Data_2(); //컴파일 에러 해결
}
}
class Car {
String color;
String gearType;
int door;
Car() { } //기본 생성자
Car(String c, String g, int d) { //매개변수가 있는 생성자
color=c;
gearType=g;
door=d;
}
}
생성자에서 다른 생성자 호출할 때 사용된다.
다른 생성자 호출시 첫줄에서만 사용 가능하다.
class Car2 {
String color;
String gearType;
int door;
Car2() {
//Car2("white", "auto", 4);
this("white", "auto", 4); //Car2(String color, String gearType, int door) 호출
}
Car2(String color) {
//Car2("white", "auto", 4);
this("white", "auto", 4); //Car2(String color, String gearType, int door) 호출
}
Car2(String color, String gearType, int door) {
this.color=color;
this.gearType=gearType;
this.door=door;
}
}
인스턴스 자신을 가리키는 참조변수.
인스턴스 메소드에서 사용 가능, 인스턴스 주소가 저장되어 있다.
지역변수(lv)와 인스턴스변수(iv)를 구별할 때 사용 가능
모든 인스턴스 메소드에 지역변수로 숨겨진 채로 존재한다.
//생성자 this()와 참조변수 this는 관계없는 개념, 다르니까 헷갈려하지말자
Car(String color, String gearType, int door) {
//인스턴스변수(iv)에 this 붙여준다. this.color는 iv, color는 lv.
this.color=color;
this.gearType=gearType;
this.door=door;
}