* 생성자(constructor) 란?
- 인스턴스가 생성될 때마다 호출되는 '인스턴스 초기화 메서드'
- 인스턴스 변수 초기화 또는 인스턴스 생성시 수행잘 작업에 사용
- 몇가지 조건을 제외하고 메서드와 같다.
- 모든 클래스에는 반드시 하나 이상의 생성자가 존재 하여야 한다.
- 생성자는 주로 객체의 멤버변수를 초기화 하는데 사용(멤버변수는 일반적으로 생성자에서 초기화)
# 인스턴스 초기화 - 인스턴스 변수에 적절한 값을 저장하는 것
Card c = new Card();
1. 생성자 new에 의해서 메모리(heap)에 Card클래스의 인스턴스가 생성
2. 생성자 Card()가 호출되어 수행된다.
3. 연산자 new의 결과를 , 생성된 Card인스턴스의 주소가 반환되어 참조변수 c에 저장
-> 생성자의 조건
- 생성자의 이름은 클래스의 이름과 같아야 한다
- 생성자는 항상 리턴값이 없습니다. 그렇다고 리턴값이 없음을 의미하는 void를 붙이지는 않는다.
// 인스턴스 생성시 수행될 코드
// 주로 인스턴스 변수의 초기화 코드를 적는다.
}
-> 기본 생성자(default constructor)
- 매개변수가 없는 생성자
- 클래스에 생성자가 하나도 없으면 컴파일러가 기본 생성자를 추가한다.
(생성자가 하나라도 있으면 컴파일러는 기본 생성자를 추가하지 않는다.)
클래스이름() { }
Card() { } // 컴파일러에 의해 추가된 Card클래스의 기본 생성자. 내용이 없다.
-> 생성자에서 다른 생성자 호출하기 _this()
▶ this() - 자기 자신을 가르키며 , 생성자, 같은 클래스의 다른 생성자를 호출 할 때 사용
다른 생성자 호출은 생성자의 첫줄 에서만 가능
class Car {
String color;
String gearType;
int door;
Car() { this("white","auto","4" } // 매개변수가 없는 생성자(기본 생성자)
Car(String c, String g, int d) { //매개변수가 있는 생성자 (생성자를 통한 멤버변수 초기화)
color = c ;
gearType = "auto"
door = 4 ;
Car() {
door = 5;
this("white","auto",4);
}
-> 참조변수 this
▶ this 인스턴스 자신을 가리키는 참조변수.인스턴스의 주소가 저장되어 있음
모든 인스턴스 메서드에 지역변수로 숨겨진 채로 존재
clss Car {
String color;
String gearType;
int door;
Car() {
this("white","auto","4");
}
car(String c, String g, int d){
color = c;
gearType = g;
door = d;
}
}
// 위 car 생성자를 this를 이용하여 변경
car(String c, String g, int d){
this.color = color;
this.gearType = gearType;
this.door = door;
}
* 변수의 초기화
- 변수를 선언하고 처음으로 값을 저장하는 것
- 맴버변수(인스턴스변수, 클래스변수) 와 배역을 각 타입의 기본값으로 자동 초기화되무로 초기화 생략 가능
- 지역변수는 사용전에 꼭!! 초기화를 해주어야 한다.
자료형 |
기본값 |
boolean |
false |
char |
'\u0000' |
byte |
0 |
short |
0 |
int |
0 |
long |
0L |
float |
0.0f |
double |
0.0d 또는 0.0 |
참조형 변수 |
null |
class InitTest{
int x; // 인스턴스 변수
int y = x ; // 인스턴스 변수
void method1() {
int i ; // 지역변수
int j = i; // 컴파일에러 !!!! 지역변수를 초기화하지 않고 사용함
-> 변수의 초기화 예시
선언예 |
설명 |
int i = 10 ; int j = 10 ; |
int형 변수 i를 선언하고 10으로 초기화 한다. int형 변수 j를 선언하고 10으로 초기화 한다. |
int i = 10, int j = 10 ; |
같은 타입의 변수는 콤마(,)를 사용해서 함께 선언하거나 초기화 할 수 있다. |
int i = 10 , j = 10 ; |
타입이 다른 변수는 함께 선언하거나 초기화할 수 없다. |
int i =10 ; int j = i ; |
변수 i에 저장된 값으로 변수 j를 초기화 한다. 변수 j는 i의 값인 10으로 초기화 한다. |
int j= i ; int i= 10; |
변수 i가 선언되기 전에 i를 사용 할 수 없다. |
-> 멤버변수의 초기화
▶ 멥버변수의 초기화 3가지 방법
1. 명시적 초기화
class Car {
int door = 4; // 기본형 변수의 초기화
Engine e = new Engine() ; // 참조형 변수의 초기화
//....
}
2. 생성자(constructor)
- this를 이용한 맴버변수의 초기화
car(String color, String gearType, int door){
this.color = color ;
this.gearType = gearType;
this.door = door ;
}
3. 초기화 블럭
- 인스턴스 초기화 블럭 : { }
- 클래스 초기화 블럭 : static { }
'JAVA' 카테고리의 다른 글
자바의 객체지향개념 2-2 (0) | 2015.10.05 |
---|---|
자바의 객체지향개념 2-1 (0) | 2015.10.05 |
자바의 객체지향개념 1-2 (0) | 2015.10.05 |
자바의 객체지향개념 1-1 (0) | 2015.10.05 |
본문 한글깨짐 문제 해결방법 (0) | 2015.09.22 |