オブジェクト向けプログラミング(Java)-クラス内の変数を初期化します.
7970 ワード
初期化変数
変数を宣言し、最初に値を保存することを변수의 초기화
と呼びます.変数の初期化は必須またはオプションの場合がありますが、可能な場合は宣言と同時に適切な値に初期化する必要があります.
クラスでは、インスタンス変数を単独で初期化する必要はありません.資料型に応じて適切な値で初期化されるからです.ただし、領域変数は使用する前に初期化する必要があります.class App {
int x;
int y = x;
void method(){
int i;
int j = i; // 런타임 에러! 지역 변수 초기화 없이 사용
}
}
参照として、各タイプのデフォルト値は次のとおりです.
データ型基本値booleanfalsechar"<00"byte,short,ing 0 long 0 Lfloat 0.0fdouble0.0 dまたは0.0参照変数null
メンバー変数の初期化
メンバー変数の初期化には、ゾーン変数とは異なり、さまざまな方法があります.これを比較して説明します.
1.明示的な初期化
変数は宣言と同時に初期化されます.class App{
int a = 1, b = 2;
}
[ブロックを初期化](Initialization Block)またはジェネレータを使用して、最も簡単で、最も一般的で、最も複雑な初期化操作を行います.
2.初期化ブロック
クラス初期化ブロックとインスタンス初期化ブロックの2種類があります.前者はクラス変数の初期化に使用され、後者はインスタンス変数の初期化に使用されます.class App{
static int A = 1;
static{
A = 2;
// a = 1; // Error : 인스턴스 변수 초기화 불가
}
int a = 0;
{
}
}
参照として、複数の初期化ブロックを作成できます.さらに最も重要なのは,クラスを最初に割り当てて初期化する際に,複数の論理を実行して初期化を実行できることである.final
型変数も!
class App {
// 이렇게 final형도 초기화가 가능하고, 블럭도 여럿 나눌 수 있어요!
final static StringBuilder sb;
static{
sb = new StringBuilder();
sb.append("a");
}
int i = 0;
int a = 2;
{
i = 1;
a = 2;
}
final static StringBuilder sb2;
static{
sb2 = new StringBuilder();
sb.append("a");
}
}
メンバー変数の初期化時間と順序
≪クラス変数|Class Variables|oem_src≫:クラスの最初のロード時に1回のみ初期化
≪インスタンス変数|Instance Variable|oem_src≫:インスタンスが作成されるたびに、各インスタンスが初期化されます.
クラス変数初期化順序:デフォルト→to→明示的初期化→to→クラス初期化ブロック
インスタンス変数初期化順序:デフォルト→\to→明示的初期化→\to→インスタンス初期化ブロック→\to→ジェネレータ
例を見ると、以下のようになります.// 초기화 순서
// 1. 기본 값 : cv = 0
// 2. 명시적 초기화 : cv = 1
// 3. 클래스 초기화 블럭 : cv = 2
// 4. 기본값 : iv = 0, cv = 2
// 5. 명시적 초기화 : iv = 1, cv = 2
// 6. 인스턴스 초기화 블럭 : iv = 2, cv = 2
// 7. 생성자 : iv = 3, cv = 3
class App{
static int cv = 1;
int iv = 1;
static{
cv = 2;
}
{
iv = 2;
}
App(){
iv = 3;
}
}
Reference
この問題について(オブジェクト向けプログラミング(Java)-クラス内の変数を初期化します.), 我々は、より多くの情報をここで見つけました
https://velog.io/@redgem92/Java-객체지향-프로그래밍-클래스-내-변수-초기화
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
class App {
int x;
int y = x;
void method(){
int i;
int j = i; // 런타임 에러! 지역 변수 초기화 없이 사용
}
}
class App{
int a = 1, b = 2;
}
class App{
static int A = 1;
static{
A = 2;
// a = 1; // Error : 인스턴스 변수 초기화 불가
}
int a = 0;
{
}
}
class App {
// 이렇게 final형도 초기화가 가능하고, 블럭도 여럿 나눌 수 있어요!
final static StringBuilder sb;
static{
sb = new StringBuilder();
sb.append("a");
}
int i = 0;
int a = 2;
{
i = 1;
a = 2;
}
final static StringBuilder sb2;
static{
sb2 = new StringBuilder();
sb.append("a");
}
}
// 초기화 순서
// 1. 기본 값 : cv = 0
// 2. 명시적 초기화 : cv = 1
// 3. 클래스 초기화 블럭 : cv = 2
// 4. 기본값 : iv = 0, cv = 2
// 5. 명시적 초기화 : iv = 1, cv = 2
// 6. 인스턴스 초기화 블럭 : iv = 2, cv = 2
// 7. 생성자 : iv = 3, cv = 3
class App{
static int cv = 1;
int iv = 1;
static{
cv = 2;
}
{
iv = 2;
}
App(){
iv = 3;
}
}
Reference
この問題について(オブジェクト向けプログラミング(Java)-クラス内の変数を初期化します.), 我々は、より多くの情報をここで見つけました https://velog.io/@redgem92/Java-객체지향-프로그래밍-클래스-내-변수-초기화テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol