[Java]オブジェクト向けプログラミング-作成者


コンストラクタ


インスタンスを生成するときに呼び出される인스턴스 초기화 메서드です.主にインスタンスの初期化操作に使用されます.また、インスタンスの作成時に実行する必要がある操作にも使用できます.
クラスでは、構造はインスタンスメソッドに似ていますが、戻りタイプは存在しません.宣言すらしない.ジェネレータの条件は次のとおりです.
  • 名前はクラスと同じである必要があります
  • 戻り値なし
  • 宣言はこうした
    class App{
    	App(){
        	// 무언가, App 생성하기 전에 필요한 것들 초기화
        }
        App(int a, int b){
        	// 기존 메서드처럼 오버로딩이 가능해요
        }
    }
    インスタンスを作成するのではなく、インスタンスを作成する役割を「作成」と勘違いする可能性があります.
    Appクラスの場合、インスタンスを作成する手順は次のとおりです.
    App app = new App();
    1.クラスインスタンスは、演算子voidによってメモリnewに作成されます.
    2.呼び出しジェネレータnew実行
    3.heap生成されたApp()インスタンスのアドレスが返され、参照変数newに格納されます.

    デフォルトジェネレータ


    コンパイル時にソースファイルAppクラスのコンストラクタが1つもない場合、コンパイラは次のコンストラクタを自動的に追加してコンパイルします.機能は実行されないため、作成時に初期化する必要があるインスタンスは作成者を宣言する必要があります.
    class App {
    	// 선언은 안되었다면 컴파일러는 자동으로 생성!
    	App() {
        }
    }
    ただし、パラメータがあり、デフォルトジェネレータ以外のジェネレータが宣言され、デフォルトジェネレータが単独で宣言されていない場合、インスタンスをデフォルトジェネレータとして作成しようとすると、コンパイラはエラーを処理します.コンストラクション関数が作成されている場合、デフォルトのコンストラクション関数は自動的に作成されません.
    class App {
    	App(int a, int b) { }
    }
    
    App a1 = new App(1, 2);
    // App a2 = new App();	// 에러! 컴파일러는 기본 생성자를 만들지 않아요
    コンパイラがデフォルトのジェネレータを自動的に追加するのは、ジェネレータが宣言されていない場合だけであることを覚えておいてください.

    コンストラクション関数から別のコンストラクション関数を呼び出す-this(),this


    同じクラスのメンバー間で呼び出すことができるように、ジェネレータ間でも呼び出すことができます.もちろん、以下の2つの条件を満たさなければなりません.
  • クラス名
  • ではなくappを使用する必要があります.
  • あるコンストラクタから別のコンストラクタを呼び出す場合は、最初の行で
  • を呼び出す必要があります.
    class App{
      App() {}
      App(String color){
          i = 1;
          App();	// Error : 생성자가 첫 줄이 아니에요
          			// Error : 생성자 이름이 아닌 this로 명명해야 해요
      }
    }
    これは、コンストラクション関数内の初期化操作中に他のコンストラクション関数を呼び出すと、呼び出された他のコンストラクション関数内でもメンバー変数の値が初期化されるため、以前の初期化操作が意味を持たなくなる可能性があるためです.
    プログラミング時にパラメータ名とメンバー変数名を繰り返す場合がありますこのため、クラスのインスタンス変数であることを示す*.javaをメンバー変数名に追加できます.特殊文字を追加する手間を避けるために、意味を色あせさせる乱雑な人字宣言をする必要はありません.
    class App{
    	int a;
        App(int a/* 이름이 같다...! */){
        	this.a = a; 	// 어림없지. this로 구분한다
        }
    }
    💡整理する
  • this:参照変数とは、インスタンス自体を指し、インスタンスのアドレス
  • を格納する
  • this()、this(パラメータ):同じクラスの他のジェネレータを呼び出すジェネレータ
  • ジェネレータを使用したインスタンスのコピー


    また、現在使用されているインスタンスと同じステータスのインスタンスを作成する場合は、ジェネレータを使用します.
    ここでレプリケーションを実行する場合、クラスに似たメンバー変数の参照型変数がある場合は、意図をよく考慮して作成する必要があります.参照変数をそのままthisに処理すると、初期化値ではなく変数のアドレスがコピーされます.このように、クラス変数が共有されている相互に独立したインスタンスを作成することを目的としています.
    このように、参照型変数this.をそのまま処理し、2つの変数が共有される場合、浅い複製_と呼ぶ.完全に独立したレプリケーションを実行することを深度レプリケーション=と呼びます.次の例では、浅いレプリケーションに対する注意を記録し、深いレプリケーションを試みます.
    class App{
    	Point point;
    	int a, b, c;
        App(App app){
        	// WARNING :
            // 클래스는 값이 아닌 주소를 복사하기 때문에 새로 생성해서 기본 값들을 초기화 해줘야 
            // 두 App 인스턴스의 Point 변수들이 독립적으로 동작하게 끔 해야 해요.
        	this.point = new Point();
            this.point.x = app.point.x;
            this.point.y = app.point.y;
            
        	this.a = app.a;
        	this.b = app.b;
        	this.c = app.c;
        }
    }