[Java] OOP_변수의 초기화

jeong·2021년 5월 29일
0

Java 자바

목록 보기
16/28

변수의 초기화

초기화 종류

1) 지역변수는 직접 초기화해줘야 함 - 필수*

//변수 초기화 에러 예시
class InitTest {
    int x; //인스턴스 변수
    int y=x; //인스턴스 변수
    
    void method1() {
    	int i; //지역변수
        int j=i; //에러 : 지역변수를 초기화 하지 않고 사용 
    }
}

멤버변수의 초기화

cv와 iv 초기화에는 자동초기화, 간단초기화, 복잡초기화 3가지 방법이 있다.
자동초기화는 저절로 0으로 초기화되고 간단초기화는 대입(=)연산자를 사용하고, 복잡초기화는 {}, static{}, 생성자를 사용한다.

초기화 종류

1) 명시적 초기화(=) : 간단 초기화, 대입연산자를 이용해 초기화한다.

class Car {
   int door=4; //기본형 변수(primitive type)의 초기화
   Engine e=new Engine(); //참조형 변수(reference type)의 초기화
}

2) 초기화 블럭 : 복잡한 초기화에 사용함. 여러 문장을 넣을 수 있다.

  • 인스턴스 초기화 블럭 : {} //iv 초기화, 거의 사용하지 않음
  • 클래스 초기화 블럭 : static {} //cv 초기화
class StaticBlockTest {
    static int[] arr=new int[10]; //명시적 초기화
    
    //cv 복잡초기화
    static { //클래스 초기화 블럭 - 배열arr을 난수로 채운다. 
    	for(int i=0; i<arr.length; i++) {
        	arr[i]=(int)(Math.random()*10)+1;
        }
    }
}

3) 생성자 : iv초기화에 사용, 복잡한 초기화에 사용함.

class Car(String color, String gearType, int door) {//매개변수 있는 생성자
    this.color=color;
    this.gearType=gearType;
    this.door=door;
}

초기화 시점

1) 클래스 변수(cv)는 클래스가 처음 로딩될 때(=메모리에 올라갈 때) 단 한번 초기화된다.
2) 인스턴스 변수(iv)는 인스턴스가 생성될 때마다 초기화

class InitTest {
    static int cv=1;   //명시적 초기화
    int iv=1; 	      //명시적 초기화
    
    static { cv=2; } //	클래스 초기화 블럭
    { iv=2; } 	    // 인스턴스 초기화 블럭
    
    InitTest() {   //생성자
    	iv=3;
    }
}
profile
배우는 초보개발자

0개의 댓글