[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.初期化フィールド


    クラスからオブジェクトを作成すると、フィールドは自動的にデフォルトの初期値に設定されます.
    他の値にリセットしたい場合は
  • フィールド宣言時の初期値
  • ジェネレータに初期値を提供する方法
  • 2種類あります.
    フィールドを宣言するときに初期値が与えられると、同じクラスから作成されたすべてのオブジェクト(オブジェクトを作成するとき)に同じデータが表示されます.
    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()を使用して重複コードを削除できます.