Hello

Java 변수의 초기화, 멤버변수의 초기화

by 볼빵빵오춘기

변수의 초기화

  • 멤버변수(iv, cv)는 자동 초기화된다.
  • 지역변수(lv)는 수동 초기화 해야함(사용전에 꼭 초기화 해야한다.!!!
class InitTest{
	int x; // 인스턴스 변수
	int y = x; // 인스턴스 변수

	void method1(){
		int i; // 지역변수
		int j = i; // error! 지역변수를 초기화하지 않고 사용
	}

}

⇒ 2,3번째줄에 선언된 변수 x,y는 대입해서 0을 넣진 않았지만 0으로 자동 초기화되어있다.

⇒ method1 메소드 안에 변수 i,j는 대입해서 초기화 시켜줘야한다.

 

참고!

type마다 자동초기화되는 값이 다르다.

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

 

멤버변수(iv,cv)의 초기화

초기화 방법1. 명시적 초기화(=) [대입연산자(선언시) - 간단 초기화]

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

⇒ 참조형일때는 가질 수 있는 값은 null or 객체주소 이다.

null은 기본값인데 이것은 초기화가 아니다.

Engine e;라고 했을 때는 null 이고 = new Engine(); 까지 해줘야 객체 주소가 들어간다.

Engine e1; // null 
Engine e2= new Engine(); // 초기화가 된 것!!

 

 

초기화방법2. 초기화 블럭 [복잡한 초기화, 초기화시 여러 문장이 필요하면 사용]

  • 인스턴스 초기화 블럭 : {}
  • 클래스 초기화 블럭 : static {}
class StaticBlockTest{
	static int[] arr = new int[10]; // 명시적 초기화

	static{
		for(int i=0; i<arr.length;i++){ // 클래스 초기화 블럭 - 배열 arr을 난수로 채움
			arr[i] = (int)(Math.random()*10)+1;
		}
	}

}

 

초기화방법3. 생성자 [iv 초기화 && 복잡한 초기화]

Car(String color, String gearType, int door){
	this.color = color;
	this.gearType = gearType;
	this.door = door;
}

 

 

 

초기화 시점

  • 클래스 변수 초기화 시점: 클래스가 처음 로딩될 때 단 한 번 (= 메모리에 올라갈 때)
  • 인스턴스 변수 초기화 시점 : 인스턴스가 생성될 때 마다

예제 코드

class InitTest{

	// 간단 초기화 코드 start
	static int cv = 1; // 명시적 초기화
	int iv = 1; // 명시적 초기화
	// 간단 초기화 코드 end

	// 복잡 초기화 코드 start	
	static{ cv = 2; }// 클래스 초기화 블럭
	{ iv = 2; } // 인스턴스 초기화 블럭
	
	InitTest() { // 생성자
		iv = 3; 
	}
	// 복잡 초기화 코드 end

}

 

초기화 순서

작성시 알아두면 좋다.

자동 → 간단 → 복잡 방법으로 만들고 순서는 cv → iv

 

블로그의 정보

Hello 춘기's world

볼빵빵오춘기

활동하기