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
'👩🏻💻 About 프로그래밍 > Java' 카테고리의 다른 글
Java 클래스 간의 관계, 상속과 포함관계 (0) | 2023.11.29 |
---|---|
Java 상속(Inheritance) (0) | 2023.11.29 |
Java 생성자 this(), 참조변수 this (0) | 2023.11.29 |
Java 기본 생성자, 매개변수가 있는 생성자 (1) | 2023.11.29 |
Java 생성자(constructor) (0) | 2023.11.28 |
블로그의 정보
Hello 춘기's world
볼빵빵오춘기