java oop 17 변수의 초기화
변수의 초기화
지역변수(lv)는 수동 초기화 해야함(사용전에 꼭 직접 초기화해줘야 한다.)
멤버변수(iv,cv)는 자동초기화 된다.
자동초기화시 기본값
boolean false
char '\u0000'
byte,short,int 0
long 0L
float 0.0f
double 0.0d 또는 0.0
참조형 null
멤버변수(iv,cv)의 초기화
1.자동초기화: 0으로 자동초기화
2.간단초기화: 대입연산자(=) 사용
3.복잡초기화:
iv - 생성자메서드, { } (그냥 블럭은 잘 안쓰임)
cv - static{ }
초기화시점
클래스변수(cv) : 클래스가 처음 로딩될때 한번!
인스턴스변수(iv) : 인스턴스(객체)가 생성될때마다
class InitTest{
int x;//x는 iv라서 자동초기화(x=0) 됐으니까 사용가능
int y = x;
void method1(){
int i;
/*lv는 재사용이 빈번해서 0으로 초기화하지 않고
메서드 사용할때마다 값을 덮어쓴다.
그래서 사용전에 매번 수동초기화 해줘야한다. */
// int j = i; 에러! 지역변수를 초기화하지 않고 사용해서
}
}
class Car{
//2.간단초기화(명시적 초기화)
int door = 4; //기본형 변수의 초기화
Engine e = new Engine();//참조형 변수의 초기화
//그냥 Engine e; 이렇게 쓰면 참조변수에 null값 들어가 있다. 이건 아무것도 아님.
//그래서 Engine e = new Engine() 객체생성해서 객체의 주소를 참조변수 e에 담아줘야함.
//그것이 참조변수의 초기화.
}
class StaicBlockTest{
static int[] arr = new int[10]; //명시적 초기화
//int배열을 0으로 간단초기화했다.
//그런데 int배열을 1~10사이의 난수로 초기화하고 싶으면 간단초기화로 불가능
//static{ } 사용해서 복잡초기화해줘야 한다.
static { //static{ }을 이용한 cv 복잡초기화
for(int i=0;i<arr.length;i++) {
arr[i] = (int)(Math.random()*10)+1;
}
}
}
class InitTest2{
static int cv = 1; //간단초기화
int iv = 1; //간단초기화
static { cv=2; } //cv복잡초기화
{ iv=2; } //iv복잡초기화
InitTest2(){//iv복잡초기화
iv = 3;
}
}
초기화순서
1.cv -> iv
2.자동 -> 간단 -> 복잡
InitTest2 클래스 객체생성을 한다면
InitTest2 it = new InitTest2();
1.cv초기화
자동초기화 cv=0; -> 간단초기화 cv=1; -> 복잡초기화 cv=2;
2.iv초기화
자동초기화 iv=0; -> 간단초기화 iv=1; -> 복잡초기화 cv=2; -> 복잡초기화 iv=3;
Author And Source
이 문제에 관하여(java oop 17 변수의 초기화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@bitcogo/java-oop-17-변수의-초기화저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)