java #12 생성자, 멤버변수와 인스턴스변수, this
* 생성자(constructor)
- 클래스가 객체로 만들어질때 (객체화) instance 변수에 기본으로 들어가야 할 값을 부여할 때 사용
- 실행되어야 할 코드를 넣어주는 method의 일종
- 클래스의 이름과 동일하게 만들어진다.
- 반환형이 없다.
- method 호출하듯이 직접 호출은 불가능하다.
- 생성자는 객체화를 해야 호출된다.
- this, super를 사용해서 생성자를 호출할 수 있다.
- overload 지원(객체화를 다양하게 할수있다.)
- 개발자가 코딩시 생성자를 정의하지않으면 컴파일러가 인자없는 기본생성자를 넣어준다.
- 개발자가 생성자를 하나라도 정의하면 컴파일러는 기본생성자를 만들지 않는다.
* 멤버변수와 인스턴스변수
|
* 클래스 작성법
- 접근지정자 class 클래스명 extends 부모클래스명 implements 구현할interface명 ...{
- 접근지정자 public : 다른 package에서 호출 가능 default : 다른 package에서 호출 불가능 - 클래스명 : 낙타체, 첫글자 대문자. - 부모클래스명 : 1개 - 구현할interface명 : 여러개 |
* 생성자 작성법
- 접근지정자 클래스명(매개변수...){
- 접근지정자 public : 클래스 외부에서 객체화 가능 protected : 동일 패키지의 다른 클래스에서 객체화 가능. 패키지가 다르면 상속관계의 자식클래스만 객체화 private : 외부에서 객체화할 수 없음 default : 동일패키지의 다른 클래스에서 객체화 가능. 패키지가 다르면 객체화 할 수 없음. |
* this
- 객체(instance)가 가지고 있는 자원(변수, method)을 사용할 때 간편하게 쓸수있는 키워드
- 객체화 후 인스턴스 영역에서 사용할 수 있다.
- static영역은 객체가 만들어지기 전에 호출되므로 사용할 수 없다.
- 키워드형식과 메소드형식 두가지 형태로 사용할 수 있다.
- 메소드 형태(생성자의 첫번째 줄에서만 사용 가능)
this(); this(값...);
- 현재 클래스의 다른 생성자를 호출
- 생성자의 첫번째 줄에서만 사용 가능.
- 재귀호출이 되면 error가 발생. (자신을 다시 호출)
생성자 | 객체화 | 결과 | |||
| new T(); | 인자 기본 | |||
| new T(2); | 인자 | |||
| new T(2); | 에러발생 | |||
| new T(); | 에러발생 |
*this 2
키워드형식 : 생성된 객체 자신이 가지고 있는 member변수, method를 호출할때 사용.
this.변수명 this.메소드명 생성된(사용하고 있는)객체의 주소로 변환 |
- 객체화 후에 사용할 수 있다.
- static에서는 객체가 생성되기 전에 호출되기 때문에 this를 사용할 수 없다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | package day0219; /** * this의 keyword형식의 사용. * this.변수명, this.메서드명();으로 사용한다. * this 생성되어 현재 사용하는 객체의 주소로 * 변환되는 키워드 * * @author */ public class ThisKeyword { int i; // member변수 (instance 변수) int j; public void method(int i) { j = 10;// member변수가 parameter와 이름이 다르다면 heap에 생성된 변수를 사용하게 된다. this.i = i; //member변수의 이름과 parameter의 이름이 같다면 parameter를 우선적으로 사용. //이때 this를 쓰면 멤버 변수 i를 가르키게 된다. 없을땐 지역변수 i를 가르킨다. System.out.println("method 내에서의 this " + this); }// method public static void main(String[] args) { // System.out.println(this); //static에서는 객체가 만들어지기 전에 호출되기 때문에 // this를 쓸 수 없다. ThisKeyword tk = new ThisKeyword(); System.out.println("tk객체의 힙의 주소 "+tk);//tk의 번지 1db05b2 ThisKeyword tk1 = new ThisKeyword(); System.out.println("tk1객체의 힙의 주소 "+tk1);//tk의 번지 1db05b2 tk.method(10); tk1.method(10); }// main }// class |
'컴퓨터 관련 > JAVA 강의' 카테고리의 다른 글
java #14 다형성, 오버로드(overload), 오버라이드(override), Annotation (0) | 2016.12.18 |
---|---|
java #13 상속(inheritance), super (0) | 2016.12.18 |
java #11 객체지향프로그래밍 (0) | 2016.12.18 |
java #10 특수문자, variable arguments, printf (0) | 2016.12.18 |
java #8 #9 변수/메소드, 접근지정자 (0) | 2016.12.18 |