Java oop 17変数の初期化
1736 ワード
初期化変数
領域変数(lv)は手動で初期化する必要があります(使用前に直接初期化する必要があります).
メンバー変数(iv,cv)は自動的に初期化されます.
自動初期化時のデフォルト
boolean false
char '\u0000'
byte,short,int 0
long 0L
float 0.0f
ダブル0.0 dまたは0.0
リファレンスnull
メンバー変数の初期化(iv,cv)
1.自動初期化:自動初期化は0
2.単純初期化:代入演算子(=)を使用
3.複雑な初期化:
iv-コンストラクション関数メソッド,{}(一般的にブロックは使用されません)
cv - static{ }
イニシャルポイント
クラス変数(cv):クラスを最初にロードするときに、1回実行します.
インスタンス変数(iv):インスタンス(オブジェクト)が作成されるたびに
1.cv -> iv
2.自動->単純->複雑
InitTest 2クラスオブジェクトを作成します.
InitTest2 it = new InitTest2();
1.cv初期化
自動初期化cv=0;->単純初期化cv=1;->複雑な初期化cv=2;
2.iv初期化
自動初期化iv=0;->単純初期化iv=1;->複雑な初期化cv=2;->複雑な初期化iv=3;
領域変数(lv)は手動で初期化する必要があります(使用前に直接初期化する必要があります).
メンバー変数(iv,cv)は自動的に初期化されます.
自動初期化時のデフォルト
boolean false
char '\u0000'
byte,short,int 0
long 0L
float 0.0f
ダブル0.0 dまたは0.0
リファレンスnull
メンバー変数の初期化(iv,cv)
1.自動初期化:自動初期化は0
2.単純初期化:代入演算子(=)を使用
3.複雑な初期化:
iv-コンストラクション関数メソッド,{}(一般的にブロックは使用されません)
cv - static{ }
イニシャルポイント
クラス変数(cv):クラスを最初にロードするときに、1回実行します.
インスタンス変数(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.自動->単純->複雑
InitTest 2クラスオブジェクトを作成します.
InitTest2 it = new InitTest2();
1.cv初期化
自動初期化cv=0;->単純初期化cv=1;->複雑な初期化cv=2;
2.iv初期化
自動初期化iv=0;->単純初期化iv=1;->複雑な初期化cv=2;->複雑な初期化iv=3;
Reference
この問題について(Java oop 17変数の初期化), 我々は、より多くの情報をここで見つけました https://velog.io/@bitcogo/java-oop-17-변수의-초기화テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol