JAvaオブジェクトの初期化
JAvaの変数の初期化:
JAvaは、すべての変数が使用前に適切に初期化されることを保証し、メソッドのローカル変数に対してjavaはコンパイル時にエラーでこの保証を貫徹します.
サンプルコード:
以上のコードはコンパイルできません.これは、i++を実行する場合、iがメソッドのローカル変数であるため、i値が初期化されていないため、他の操作を実行するのは明らかに間違っています.
ただし、メンバー変数では状況が異なり、このクラスの各メンバー変数(メンバー変数は基本的なデータ型)には初期値があります.
サンプルコード:
メンバー変数の場合、JVMは構築方法を実行する前に、メンバー変数に初期値を付与することを保証します.したがって、上記のコードはコンパイル時にエラーが発生しません.
Dogというクラスがあると仮定して、オブジェクトの作成プロセスをまとめます.
1. staticキーワードを表示せずに使用しても、コンストラクタは実際には静的な方法です.したがって、Java解釈器は、Dogタイプのオブジェクトが初めて作成された場合、またはDogクラスの静的メソッド/静的ドメインが初めてアクセスされた場合、Dog.classファイルを位置決めするためにクラスパスを検索する必要があります.
2. Dog.classをロードすると、classオブジェクトが作成され、静的初期化に関するすべてのアクションが実行されるため、静的初期化はClassオブジェクトが最初にロードされたときにのみ行われます.
3. new Dog()でオブジェクトを作成すると、まずスタック上にDogオブジェクトに十分な記憶領域が割り当てられます.
4. このストレージスペースはクリアされ、Dogオブジェクトのすべての基本タイプデータが自動的にデフォルト値に設定され(数値では0、ブール型、文字型も同じ)、参照はnullに設定されます.
5. フィールド定義に表示されるすべての初期化アクションを実行します.
6. コンストラクタを実行します.
JAvaは、すべての変数が使用前に適切に初期化されることを保証し、メソッドのローカル変数に対してjavaはコンパイル時にエラーでこの保証を貫徹します.
サンプルコード:
public void increase(){
int i;
i++;
}
以上のコードはコンパイルできません.これは、i++を実行する場合、iがメソッドのローカル変数であるため、i値が初期化されていないため、他の操作を実行するのは明らかに間違っています.
ただし、メンバー変数では状況が異なり、このクラスの各メンバー変数(メンバー変数は基本的なデータ型)には初期値があります.
サンプルコード:
public class VariableTest{
public int i;
public static void main(String args[]){
System.out.println(new Variabletest().i);// 0
}
}
メンバー変数の場合、JVMは構築方法を実行する前に、メンバー変数に初期値を付与することを保証します.したがって、上記のコードはコンパイル時にエラーが発生しません.
Dogというクラスがあると仮定して、オブジェクトの作成プロセスをまとめます.
1. staticキーワードを表示せずに使用しても、コンストラクタは実際には静的な方法です.したがって、Java解釈器は、Dogタイプのオブジェクトが初めて作成された場合、またはDogクラスの静的メソッド/静的ドメインが初めてアクセスされた場合、Dog.classファイルを位置決めするためにクラスパスを検索する必要があります.
2. Dog.classをロードすると、classオブジェクトが作成され、静的初期化に関するすべてのアクションが実行されるため、静的初期化はClassオブジェクトが最初にロードされたときにのみ行われます.
3. new Dog()でオブジェクトを作成すると、まずスタック上にDogオブジェクトに十分な記憶領域が割り当てられます.
4. このストレージスペースはクリアされ、Dogオブジェクトのすべての基本タイプデータが自動的にデフォルト値に設定され(数値では0、ブール型、文字型も同じ)、参照はnullに設定されます.
5. フィールド定義に表示されるすべての初期化アクションを実行します.
6. コンストラクタを実行します.