this가 하는 일
- 인스턴스 자신의 메모리를 가리킴
- 생성자에서 또 다른 생성자를 호출 할때 사용
- 자신의 주소(참조값)을 반환 함
생성된 인스턴스 메모리의 주소를 가짐
- 클래스 내에서 참조변수가 가지는 주소 값과 동일 한 주소 값을 가지는 키워드
public void setYear(int year)
{
this.year = year;
}
- 객체생성시 힙메모리에 인스턴스가 생성됨
- 함수나 메서드의 지역변수는 스택메모리에 잡힘
생성자에서 다른 생성자를 호출 하는 this
- 클래스에 생성자가 여러 개 인경우, this를 이용하여 생성자에서 다른 생성자를 호출할 수 있음
- 생성자에서 다른 생성자를 호출하는 경우, 인스턴스의 생성이 완전하지 않은 상태이므로 this() statement 이전에 다른 statement를 쓸 수 없음
- Person생성자에서 디폴트 값을 no name, 1로 설정하는 생성자를 만들때
this.name = "no name";
this.age = 1;
로 셋팅하는것보단 기존에 있는 인자값이 있는 오버로딩된 생성자를 호출해서
this("no name",1); 로 작성하는게 깔끔함
- 주의점은 아래처럼 this이전에 작성하면 생성자가 호출되기 전이기 때문에 오류남
(this("no name",1); 다음줄에 적는건 호출된 다음이라 가능
자신의 주소를 반환하는 this
public class Person {
String name;
int age;
public Person() {
this("이름없음", 1);
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public Person getPerson() {
return this;
}
public static void main(String[] args)
{
Person p = new Person();
p.name = "James";
p.age = 37;
Person p2 = p.getPerson();
System.out.println(p);
System.out.println(p2);
}
}
- 클래스안의 멤버변수는 객체 생성시 자동초기화
- 메서드 안의 내부변수는 자동초기화 안됨, 수동으로 내가 해줘야함
- 이클립스에서 멤버변수는 파란색임
- main클래스는 구동클래스임 (웹에서 쓸거면 필요없음, 웹서버없을때 돌릴려고 씀)
- 윤년은 4의 배수임, 100의 배수는 윤년아님,400의 배수는 윤년임
- String타입일때 +써서 붙여쓰는건 메모리 오바가 커서 보통 StringBuffer 나 StringBuilder씀
- StringBuffer buffer = new StringBuffer();
buffer.append(객체or내용);
- 생성자에서 다른생성자 호출가능
- 생성자 메서드안에 this("이름없음",1); 처럼 있으면 해당 클래스안에 String,int 타입으로 받는 다른생성자를 찾아서 호출함