[Java]レベル③
[作成者]
ジェネレータは
new
演算子とともに使用され、クラスからオブジェクトを作成するときに呼び出され、オブジェクトの初期化を担当します.1.デフォルトジェネレータ
Javaの各クラスには、1つ以上のコンストラクション関数が必要です.
クラスでコンストラクション関数の宣言が省略されている場合、コンパイラはデフォルトのコンストラクション関数をバイトコードに自動的に追加します.
既定のジェネレータシェイプ
클래스이름() { }
public class
と宣言された場合、デフォルトジェネレータもpublic
を追加します.クラスが
public
なしでclass
と宣言された場合、デフォルトジェネレータはpublic
を追加しません.例
Car() {}
デフォルトのコンストラクション関数のおかげで、クラスでコンストラクション関数を宣言することなく、次のnew
演算子を使用してオブジェクトを作成できます.Car myCar = new Car(); //기본 생성자
クラスに明示的に宣言されたコンストラクション関数がある場合、コンパイラはデフォルトのコンストラクション関数を作成しません.したがって、デフォルトジェネレータが必要な場合は、デフォルトジェネレータを明示的に宣言する必要があります.
2.作成者宣言
作成者の宣言方法
클래스이름(매개변수선언, ... ) {
//객체의 초기화 코드
}
ジェネレータはクラス名と同じタイプを返しません.例
public class Car {
//생성자
Car(String color, int cc) {
}
}
public class CarExample {
public static void main(String[] args) {
Car myCar = new Car("red", 3000);
//Car myCar = new Car(); <- 기본 생성자를 호출할 수 없다.
}
3.初期化フィールド
クラスからオブジェクトを作成すると、フィールドは自動的にデフォルトの初期値に設定されます.
他の値にリセットしたい場合は
フィールドを宣言するときに初期値が与えられると、同じクラスから作成されたすべてのオブジェクト(オブジェクトを作成するとき)に同じデータが表示されます.
public class Korean {
String nation = "Korea";
String name;
int age;
}
上記の例では、Korean
オブジェクトのnation
値は、いずれも"Korea"
である.ただし、オブジェクトを作成するときに外部から与えられた異なる値を使用して初期化する必要がある場合は、ジェネレータによって初期化する必要があります.
上記のコードでは、
name
およびage
フィールド値は、オブジェクトの作成時に異なる値を持つ必要があるため、これらの値をコンストラクション関数のパラメータとして初期化する必要がある.public class Korean {
//필드
String nation = "Korea";
String name;
int age;
//생성자
public Korean(String n, int a) {
name = n;
age = a;
}
}
通常、パラメータの名前はフィールド名と似ているか、同じ名前を使用します.しかし、このように使うこともできません!
public Korean(String name, int age) {
name = name;
age = age;
}
フィールドがパラメータ名と同じである場合、パラメータの使用優先度が高いため、ジェネレータではフィールドにアクセスできません.したがって、フィールド名に
this.
を付ける必要があります.public Korean(String name, int age) {
this.name = name;
this.age = age;
}
4.過負荷ジェネレータ
Javaでは、コンストラクション関数のリロードが提供され、さまざまな方法でオブジェクトを作成できます.
ジェネレータオーバーロードとは、複数の異なるパラメータを宣言するジェネレータです.
例
public class Person {
String name;
int age;
Person() {
}
Person(String name) {
this.name = name;
}
Person(String name, int age) {
this.name = name;
this.age = age;
}
}
生成者がオーバーロードするときに注意しなければならないのは、パラメータのタイプと数、宣言の順序が同じであれば、パラメータの名前を変更するだけで生成者オーバーロードとは言えないことです.Car(String model, String color) { ... }
Car(String color, String model) { ... } //오버로딩이 아니다!
ジェネレータがオーバーロードされた場合.new
演算子によってジェネレータが呼び出されたときに提供される各値のタイプと数によって、呼び出されたジェネレータが決定される.Car car1 = new Car(); //Car() (기본 생성자) 호출
Car car2 = new Car("그랜저"); //Car(String model) 생성자 호출
Car car3 = new Car("그랜저", "흰색"); //Car(String model, String color) 생성자 호출
Car car4 = new Car("그랜저", "흰색", 300); //Car(String model, String color, int maxSpeed) 생성자 호출
5.他のジェネレータを呼び出す(this()
生成者が過負荷になると、生成者間の重複コードが発生する可能性があります.
特に、パラメータ数が異なり、フィールド初期化内容が似ているジェネレータのみの場合、このようなことがしばしば発生する.
この場合、フィールド初期化は1人の作成者に対してのみ作成されます.
残りのジェネレータは、初期化されたコンテンツを有するジェネレータを呼び出す方法によって改善することができる.
ジェネレータから他のジェネレータを呼び出すときにthis()コードを使用します。
this()
|は、独自の他のジェネレータを呼び出すコードであり、ジェネレータの最初の行でのみ許可されなければならない.this()
のパラメータ値は、呼び出されたコンストラクタのパラメータタイプに提供される必要があります.this()
以降、いくつかの追加の実行文がある場合があります.この場合、呼び出したジェネレータの実行が完了すると、元のジェネレータに戻って次の実行文を実行します.this()
を使用して重複コードを削除できます.Reference
この問題について([Java]レベル③), 我々は、より多くの情報をここで見つけました https://velog.io/@mmy789/Java-클래스-kac81e3cテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol