2017. 7. 2. 21:33
java 자바 생성자 this C. Java2017. 7. 2. 21:33
생성자(Constructor)
- 객체가 생성될때 자동으로 호출(new 명령어를 만났을때) 되며 객체를 초기화한다.
- 클래스명과 동일한 메소드
- 생성자는 리턴형이 없습니다 .
- 생성자의 역할은 인스턴트변수(클래스 내부변수) 초기화를 담당 한다.
- 생성자는 중복정의 될수 있다 . (생성자 오버로드 )
- 생성자는 리턴형이 없습니다 .
- 생성자의 역할은 인스턴트변수(클래스 내부변수) 초기화를 담당 한다.
- 생성자는 중복정의 될수 있다 . (생성자 오버로드 )
- 생성자를 정의하지 않았을 때에는 컴파일러가 제공하는 생성자가 호출되어진다.(디폴트 생성자 )
디폴트 생성자
- 자바의 모든 클래스는 최소한 한개의 생성자는 갖고 있다. 만일 사용자가 생성자를 하나도 만들지
않았을경우에도 컴파일러에 의해서 디폴트 생성자가 자동으로 호출된다.
- 자바의 모든 클래스는 최소한 한개의 생성자는 갖고 있다. 만일 사용자가 생성자를 하나도 만들지
않았을경우에도 컴파일러에 의해서 디폴트 생성자가 자동으로 호출된다.
- 전달인자가 없고, 메소드 몸체부분이 비어있는 형태이다. ex) public MyDate() { }
- 사용자가 생성자를 하나라도 만들게 되면 컴파일러는 디폴트 생성자를 제공하지 않는다.
ps. 클래스 설계시 디폴트 생성자와 같은 형태의 생성자를 만들어주는것을 습관하 하는것이 좋다.
생성자 오버로딩
- 메소드 오버로딩처럼 인수형식이 다른 생성자를 더 정의할수 있다.
생성자 기본형식
접급지정자 클래스이름(인수1...)
{
문장1;
....
}
ex)-------------------------------------------------------------------
class MyDate
{
private int year;
private int month;
public MyDate() => 생성자, 클래스명과 동일
{
year = 2006;
month = 4;
}
public MyDate( int new_year, int new_month) => 생성자 오버로딩
{
year = new_year;
month = new_month;
}
public void print()
{
System.out.println(year + "/" + month);
}
}
--------------------------------------------------------------------------
public class MyDateMain
{
public static void main(String[] args)
{
MyDate d=new MyDate(); => 생성자 호출
d.print();
MyDate d1=new MyDate(2007,12); => 생성자 호출
d1.print();
}
}
this
- 자신을 참조하는 참조변수
- 자신을 참조하는 참조변수
- class 메소드내에서만 사용가능
ex) 위의 예제에서
public MyDate( int new_year, int new_month) => 생성자 오버로딩
{
year = new_year;
month = new_month;
}
전달인자 부분이 객체 속성과 이름이 동일할 경우
public MyDate( int year, int month) => 생성자 오버로딩
{
this.year = year;
this.month = month;
}
this를 사용하여 구분해야한다. this.year은 class MyDate의 속성인 private year부분을 가르킨다.
this() 생성자
- 같은 클래스내의 다른 생성자를 호출할때 사용
- 같은 클래스내의 다른 생성자를 호출할때 사용
ex) 위의 예제와 비교해서 생성자를 보다 간략하게 정의할수 있다.
-------------------------------------------------------------------
class MyDate
{
private int year;
private int month;
public MyDate(){
year = 2008;
month = 6;
}
publicMyDate( int new_year)
{
this(); -> { 다음에 위치해야한다. / 위의 year,month를 불러온다.
year = new_year;
}
publicMyDate( int new_year, int new_month)
{
this(new_year); ->위의 생성자(int new_year)를 불러온다.
month = new_month;
}
public void print()
public void print()
{
System.out.println(year + "/" + month);
}
}
------------------------------------------------------------------
public class MyDateMain
{
public static void main(String[] args)
{
MyDate d=new MyDate(); => 생성자 호출
d.print(); => 2008/6 출력
MyDate d1=new MyDate(2009); => 생성자 호출
d1.print(); => 2009/6 출력
MyDate d2=new MyDate(2010,9) => 생성자 호출
d2.print(); => 2010/9 출력
}
}
'C. Java' 카테고리의 다른 글
java 자바 객체생성 (0) | 2017.07.02 |
---|---|
java 자바 JDBC (0) | 2017.07.02 |
java 자바 바인딩 개념 (0) | 2017.07.02 |
java 자바 배열 (0) | 2017.07.02 |
java 자바 클래스속성 접근지정자 (0) | 2017.07.02 |