this : this 키워드를 가지고 있는 인스턴스(클래스 본제본 == 객체) ---> 메소드, 생성자에서 사용가능 순서 상관 없음
this(): this(); ---> 인스턴스 기본생성자 호출문, this(매개 변수); 인스턴스 해당 케이스의 생성자를 호출하는 호출문
public class ExClass {
int a;
public ExClass( ){ // 기본생성자 : 매개변수가 없기 때문
//1) this.a = 5; // this 키워드 사용
//2) this(5); // 나와 다른 생성자 호출 하는 것.
System.out.println("기본 생성자 생성");
}
public ExClass(int a){ // 기타생성자 : 매개변수가 있기 때문
this.a = a; // this 라는 키워드는 멤버변수 앞에서만 사용할 수 있음. this라는 멤버변수 호출은 생성자, 메소드 상관없이 사용할 수 있음.
System.out.println(a);
this( )// error 발생, this라는 생성자 호출문은 기본 생성자 호출 + 반드시 생성자 첫줄에 기술해야함.
}
public void setA(int a){ // 메소드 : 리턴타입이 있기 때문
system.out.println("a의 현재값 : " + a); // this 키워드 사용 -> 메소드 안에도 사용될 수 있음.
this.a = a;
}
}
예시1)
public class ExClass {
int a;
public ExClass( ){ // 기본생성자 : 매개변수가 없기 때문
this.a = 5; // this 키워드 사용
System.out.println("기본 생성자 생성");
}
public ExClass(int a){ // 기타생성자 : 매개변수가 있기 때문
this.a = a; // this 라는 키워드는 멤버변수 앞에서만 사용할 수 있음. this라는 멤버변수 호출은 생성자, 메소드 상관없이 사용할 수 있음.
System.out.println(a);
}
public void setA(int a){ // 메소드 : 리턴타입이 있기 때문
system.out.println("a의 현재값 : " + a); // this 키워드 사용 -> 메소드 안에도 사용될 수 있음.
this.a = a;
}
}
예시2)
public class ExClass {
int a;
public ExClass( ){ // 기본생성자 : 매개변수가 없기 때문
this(5); // 나와 다른 생성자 호출 하는 것.
this(); // 기본생성자안에서는 this();인 기본생성자 호출문을 사용할 수 없음
// this will occur error.
System.out.println("기본 생성자 생성");
}
public ExClass(int a){ // 기타생성자 : 매개변수가 있기 때문
this.a = a; // this 라는 키워드는 멤버변수 앞에서만 사용할 수 있음. this라는 멤버변수 호출은 생성자, 메소드 상관없이 사용할 수 있음.
System.out.println(a);
}
public void setA(int a){ // 메소드 : 리턴타입이 있기 때문
system.out.println("a의 현재값 : " + a); // this 키워드 사용 -> 메소드 안에도 사용될 수 있음.
this.a = a;
}
}
예시3)
public class ExClass {
int a;
public ExClass( ){ // 기본생성자 : 매개변수가 없기 때문
this(5); // 나와 다른 생성자 호출 하는 것.
System.out.println("기본 생성자 생성");
}
public ExClass(int a){ // 기타생성자 : 매개변수가 있기 때문
this.a = a; // this 라는 키워드는 멤버변수 앞에서만 사용할 수 있음. this라는 멤버변수 호출은 생성자, 메소드 상관없이 사용할 수 있음.
System.out.println(a);
this( )// error 발생, this라는 생성자 호출문은 기본 생성자 호출 + 반드시 생성자 첫줄에 기술해야함.
}
public void setA(int a){ // 메소드 : 리턴타입이 있기 때문
system.out.println("a의 현재값 : " + a); // this 키워드 사용 -> 메소드 안에도 사용될 수 있음.
this.a = a;
}
}
예시4)
public class ExClass {
int a;
public ExClass( ){ // 기본생성자 : 매개변수가 없기 때문
this(5); // 나와 다른 생성자 호출 하는 것.
System.out.println("기본 생성자 생성");
}
public ExClass(int a){ // 기타생성자 : 매개변수가 있기 때문
this( )// 프로그램 다운 발생! 기본생성자와 기타생성자를 반복해서 호출하기 때문
this.a = a; // this 라는 키워드는 멤버변수 앞에서만 사용할 수 있음. this라는 멤버변수 호출은 생성자, 메소드 상관없이 사용할 수 있음.
System.out.println(a);
}
public void setA(int a){ // 메소드 : 리턴타입이 있기 때문
system.out.println("a의 현재값 : " + a); // this 키워드 사용 -> 메소드 안에도 사용될 수 있음.
this.a = a;
}
}
String name;
int age;
Person(){
this("이름 없음", 1);
}
Person(String name, int age){
this.name = name;
this.age = age;
}
Person returnItSelf() {
return this; // 객체의 주소값 반환
}
}
public class CallAnotherConst {
public static void main(String[] args) {
Person noName = new Person();
System.out.println(noName.name);
System.out.println(noName.age);
Person p = noName.returnItSelf();
System.out.println(p); //주소값 클래스 그 자체를 가져옴. 인스턴스라는 의미
System.out.println(noName);// 위와 같은 주소값
}
}
this();와 this(5); 기본생정자호출과 기타생성자호출을 반복해서 부르는 것을 주의해야함. ---> 프로그램 다운의 원인이 됨.
// 복제는 단 한번만 이루어짐.