본문 바로가기
프로그래밍/JAVA

자바의 정석 기초 ( 생성자 this() / 참조변수 this / 변수의 초기화 / 초기화 순서 )

by ✲ 2020. 7. 9.
반응형

남궁성님의 자바의 정석 기초편을 보면서 혼자 공부하는 공간입니다. 참고 부탁드립니다. 

생성자 this()

- 생성자에서 다른 생성자 호출할 때 사용

- 다른 생성자 호출시 첫 줄에서만 사용 가능 

 

참조변수 this  ( 생성자 this()와 전혀 다름! ) 

- 인스턴스 자신을 가리키는 참조변수

- 인스턴스 메서드(생성자 포함)에서 사용 가능 

- 지역변수(lv)와 인스턴스 변수(iv)를 구별할 때 사용 

Car(String c, String g, int d){               // 매개변수는 지역변수 (lv) 

    color = c;

    gearType = g;

    door = d;                      // color, gearType, door 은 인스턴스 변수(iv)이고, 같은 클래스 내에서는 this 생략 가능  

Car(String color, String gearType, int door) {

    this.color = color;

    this.gearType = gearType;

    this.door = door;           // this.color, this.gearType, this.door 은 인스턴스 변수, color, gearType, door는 로컬변수 

}   //위와 다르게 this가 생략 불가한 이유는 로컬변수와 인스턴스 변수의 이름이 똑같기 때문! 

 

참조변수 this와 생성자 this()

this : 인스턴스 자신을 가리키는 참조변수, 인스턴스의 주소가 저장, 모든 인스턴스메서드에서 지역변수로 숨겨진 채로 존재 

this() , this(매개변수) : 생성자 . 같은 클래스의 다른 생성자 호출할 때 사용 (클래스 이름 대신 this() 사용) 

 

변수의 초기화 

- 지역변수(lv)는 수동 초기화 해야함 (사용 전 꼭!!! )

- 멤버변수(iv, cv)는 자동 초기화 된다. 

class InitTest{

    int x;                  // 인스턴스 변수 

    int y = x;             // 인스턴스 변수 

    

    void method1() {

        int i ;                      // 지역변수 

        int j= i;                    // 에러 , 지역변수는 수동 초기화해야함 초기화 하지 않고 사용해서 에러 발생 

    }

}

자동초기화 되는 자료형과 기본 값 

자료형 기본 값
boolean false
char '\n0000'
byte, short, int 0
long 0L
float 0f
double 0.0d 또는 0.0
참조형 null

 

멤머변수의 초기화 

1. 명시적 초기화 (=)    (간단 초기화) 

class Car{

    int door = 4;                       // 기본형 (primitive type) 변수의 초기화 

    Engine e = new Engine();       // 참조형 (reference type) 변수의 초기화 

2. 초기화 블럭 - {} , static{}  (복잡 초기화 cv) 

- 인스턴스 초기화 블럭 : {}

- 클래스 초기화 블럭 : static {} 

3. 생성자  - iv초기화   (복잡 초기화 cv) 

Car (String color, String gearType, int door) { 

    this.color = color;

    this.gearType = gearType;

    this.door = door;

 

멤버변수의 초기화 

- 클래스 변수 초기화 시점 : 클래스가 처음 로딩될 때 단 한번 (메모리에 올라갈 때) 

- 인스턴스 변수 초기화 시점 : 인스턴스가 생성될 때 마다 

 

class InitTest{

    static int cv = 1;  // 명시적 초기화

    int iv = 1;          // 명시적 초기화 

    static { cv = 2; }  // 클래스 초기화 블럭

    { iv = 2; }           // 인스턴스 초기화 블럭

    InitTest(){           // 생성자 

        iv = 3;

    }

 

초기화 순서 

클래스 변수 > 인스턴스 변수 

자동 > 간단 > 복잡 

 

반응형

댓글