생성자에서 다른 생성자를 호출할 수 있다.
단 2가지 조건이 있다.
- 다른 생성자를 호출할 때 생성자의 이름으로 클래스 이름이 아닌 this를 사용한다.
- 반드시 생성자의 첫 줄에서만 다른 생성자를 호출할 수 있다.
class Test
{
int temp1;
int temp2;
Test()
{
this(0);
temp2 = 0;
}
Test(int temp1)
{
this.temp1 = temp1;
}
}
Test()에서 this(0)으로 다른 생성자를 호출했다.
//Case 1
Test()
{
Test(0); //this가 아닌 클래스명을 사용해서 생성자 호출
this.temp2 = 0;
}
//Case 2
Test()
{
this.temp2 = 0;
this(0); //첫 줄에서 다른 생성자를 호출하지 않음
}
위 두 개의 케이스는 모두 컴파일 에러가 난다.
다른 생성자를 반드시 첫 줄에 호출해야 하는 이유는, 중간에 호출해버리면 이전에 진행했던 초기화 작업이 무의미해 질 위험이 있기 때문이다.
this는 생성자 외에 다른 곳에도 쓰인다.
this가 참조변수로써 사용될 때는, 인스턴스 자신을 가리키는 참조변수 역할을 한다. this를 사용해서 인스턴스 변수에 접근할 수 있다.
사실상 this와 this()는 생긴 것만 비슷하지 완전히 다르다고 볼 수 있다.
생성자를 포함한 모든 인스턴스 메소드에는 자기 자신의 인스턴스를 가리키는 참조변수 this가 지역변수로 숨겨진 채 존재한다.
Test()
{
this.temp = 1;
}
void testMethod()
{
System.out.println(this.temp);
}
단 클래스 메소드(static 메소드)의 경우에는 인스턴스가 존재하지 않을 수 있으므로 메소드 내에서 this를 사용할 수 없다.
'Java' 카테고리의 다른 글
[Java] 람다식(Lambda Expression) (0) | 2022.10.12 |
---|---|
Exception 관련 클래스의 계층 구조 (Unchecked Exception/Checked Exception) (0) | 2022.03.31 |
변수의 초기화 (0) | 2022.01.20 |
[소소한 정보] 가변 인자 (Variable arguments) (0) | 2022.01.20 |
[소소한 정보] 컴파일러의 리터럴 연산, 길이가 0인 배열 (0) | 2022.01.18 |
댓글