メソッドとデータメンバーのところで、Java のオブジェクトは作成時に初期化されると述べました。初期化中に、オブジェクトのデータ メンバーに初期値が割り当てられます。明示的に初期化できます。データ メンバーに初期値を割り当てない場合、データ メンバーはその型に基づいてデフォルトの初期値を採用します。
明示的な初期化では、プログラムを作成するときに初期値を決定する必要がありますが、これは非常に不便な場合があります。コンストラクターを使用してオブジェクトを初期化できます。コンストラクターはデータ メンバーを初期化し、特定の操作を指定できます。これらの操作は、オブジェクトの作成時に自動的に実行されます。
コンストラクターを定義する
コンストラクターはメソッドです。通常のメソッドと同様に、クラス内にコンストラクターを定義します。コンストラクターには次の基本的な特性があります:
1. コンストラクターの名前はクラスの名前と同じです
2. コンストラクターには戻り値がありません
Human クラスのコンストラクターを定義します:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
311
publicクラステスト{
public static void main(string [] args){
human aperson = new Human(160);
システム。 out.println(aperson.getHeight());
}
}
クラス Human
{
/**
* コンストラクター
*/
Human(int h)
{
this.height = h;
System.out.println("私は生まれました");
}
/**
* アクセサ
*/
int getHeight()
{
return this .height;
}
int height;
}
top プログラムは出力します
I'm born 160
コンストラクターは通常のメソッドと同様にパラメーターリストを受け取ることができます。ここで、コンストラクター Human() はパラメーターとして整数を受け取ります。メソッドの本体では、整数パラメーターをデータ メンバーの高さに割り当てます。コンストラクターは、オブジェクトの作成時に 2 つのことを行います:
コンストラクターは、通常のメソッドと同様にパラメーター リストを受け取ることができます。ここで、コンストラクター Human() はパラメーターとして整数を受け取ります。メソッドの本体では、整数パラメーターをデータ メンバーの高さに割り当てます。コンストラクターは、オブジェクトの作成時に 2 つのことを行います:
1. データ メンバー this.height = h に初期値を提供します。 System.out.println("I'm Born"); を実行します。
このようにして、コンストラクターを呼び出すときに、表示の初期化ほど制約を受けることなく、柔軟に初期値を設定できます。
コンストラクターはどのように呼ばれますか?クラスを作成するときは、常に new Human() を使用します。実際、Human クラスのコンストラクターを呼び出しています。このメソッドを定義しない場合、Java は new を使用するときに呼び出す空のコンストラクターを提供します。ただし、コンストラクターを定義すると、Java はオブジェクトの作成時に定義されたコンストラクターを呼び出します。呼び出し時には、パラメータ 160 を指定します。また、最終的な実行結果から、オブジェクトの高さが実際に 160 に初期化されていることもわかります。
初期化メソッドの優先順位
メソッドとデータ メンバーでは、明示的な初期値を指定すると、データ メンバーはデフォルトの初期値の代わりに明示的な初期値を採用することがわかります。ただし、明示的な初期値を指定し、コンストラクターで同じデータ メンバーを初期化する場合、最終的な初期値はコンストラクターによって決定されます。たとえば、次の例では、
public class Test { public static void main(String[] args) { Human aPerson = new Human(160); System.out.println(aPerson.getHeight()); } } class Human { /** * constructor */ Human(int h) { this.height = h; } /** * accessor */ int getHeight() { return this.height; } int height=170; // explicit initialization }
実行結果は次のようになります:
160
オブジェクトの最終初期化値は、構築メソッドの値と一致します。つまり:
ビルドメソッド > 明示的な初期値 > デフォルトの初期値 (実際、いわゆる優先度は初期化中の実行順序に関連しています。これについては後ほど詳しく説明します) メソッドの負荷が高いクラス内では複数のコンストラクターを定義できます。例:public class Test { public static void main(String[] args) { Human neZha = new Human(150, "shit"); System.out.println(neZha.getHeight()); } } class Human { /** * constructor 1 */ Human(int h) { this.height = h; System.out.println("I'm born"); } /** * constructor 2 */ Human(int h, String s) { this.height = h; System.out.println("Ne Zha: I'm born, " + s); } /** * accessor */ int getHeight() { return this.height; } int height; }実行結果:
Ne Zha: I'm born, shit 150上記では 2 つのコンストラクターが定義されており、両方とも Human という名前です。 2 つのコンストラクターには異なるパラメーター リストがあります。
new を使用してオブジェクトを作成する場合、Java は提供されたパラメーターに基づいてどのコンストラクターを構築するかを決定します。たとえば、neZha をビルドする場合、整数 150 と文字列「shit」の 2 つのパラメータを指定します。これは 2 番目のビルド メソッドのパラメータ リストに対応するため、Java は 2 番目のビルド メソッドを呼び出します。
Java では、Java はメソッド名とパラメータリストの両方に基づいて呼び出されるメソッドを決定します。これはメソッドのオーバーロードと呼ばれます。構築メソッドはオーバーロードできます。また、以下の Breath() メソッドのように、通常のメソッドもオーバーロードできます。
public class Test { public static void main(String[] args) { Human aPerson = new Human(); aPerson.breath(10); } } class Human { /** * breath() 1 */ void breath() { System.out.println("hu...hu..."); } /** * breath() 2 */ void breath(int rep) { int i; for(i = 0; i < rep; i++) { System.out.println("lu...lu..."); } } int height; }
実行結果:
lu...lu... lu...lu... lu...lu... lu...lu... lu...lu... lu...lu... lu...lu... lu...lu... lu...lu... lu...lu...
呼び出し時にパラメーターが提供されていることがわかります: 整数 10、したがって、呼び出しはパラメータリストが一致する 2 番目の Breath() メソッドです。
概要
コンストラクターの特徴: クラスと同じ名前、戻り値なし
コンストラクターの目的: 初期化、初期操作
メソッドのオーバーロード: メソッド名 + パラメーターのリスト -> 実際に呼び出されるメソッド
コンストラクターとメソッドのオーバーロードに関するその他の Java 基本チュートリアルは有料です関連記事については、PHP 中国語 Web サイトに注目してください。