JAVA - 08. 生成者


コンストラクション関数とは?
ジェネレータを一度使用しました.オブジェクトを生成する場合、newキーワードの後に宣言される클래스명()は生成者である.
new Example();
作成者の作成
ジェネレータはクラス名と同じである必要があります.そして、刑も返されず(後で勉強)、引き継がれることもありません.ジェネレータは次のように宣言できます.
public class Example{
    //생성자
    Example(){...}
}
Javaでクラスを作成する場合、内部に1つ以上のジェネレータを作成する必要があるルールがあります.しかし、私たちは上記のようにジェネレータを実現したことがありません.では、これまで作成したクラスにはコンストラクション関数がなく、ルール違反ですか?
コンパイル時にクラスにコンストラクション関数が定義されていない場合、Javaはデフォルトコンストラクション関数(Default Constructor)というコンストラクション関数を作成します.上記内容は空の空殻生成者である.内部実装のコードはありませんが、1つ以上のジェネレータを作成する必要があるルールは守られています.
作成者の使用
ジェネレータは、メソッドのように必要に応じてすぐに呼び出されません.ジェネレータは、オブジェクトの作成時にのみ呼び出され、主にメンバー変数の値を初期化するために使用されます.次の例
class Student{
    int studentId;
    String studentName;

    void showStudentInfo(){
        System.out.println("학생번호:"+studentId);
        System.out.println("학생이름:"+studentName);
    }
}

class StudentTest{
    public static void main(String[] args){
        Student student = new Student();
        student.studentId = 1;
        student.studentName = "jaebeom";

        student.showStudentInfo();
    }
}
上記の例では、Studioオブジェクトを作成した後、メンバー変数にアクセスして値を入力し、学生情報を表示します.しかし,生成後,情報を表示するために変数に値を1つずつ入力することは非効率である.また,後で現れる「情報を隠す」という観点からも,この方法は良い例ではない.次に例を示します
class Student{
    int studentId;
    String studentName;

    Student(int id, String name){
        studentId = id;
        studentName = name;
    }

    void showStudentInfo(){
        System.out.println("학생번호:"+studentId);
        System.out.println("학생이름:"+studentName);
    }
}

class StudentTest{
    public static void main(String[] args){
        Student student = new Student(1, "jaebeom");
        student.showStudentInfo();
    }
}
上記の例では、ジェネレータを直接定義し、オブジェクトの作成時に学生番号と学生名をパラメータとしてメンバー変数を初期化します.すなわち,メンバ変数を導入して値を割り当てる必要はない.
私はここで一つ好奇心を持ったことがある.私たちは自分で構造関数を定義しましたが、パラメータを受け入れない誤った構造関数はまだ存在しますか?結論は「存在しない」.ジェネレータを直接定義した場合、ポーリングジェネレータは作成されません.
class StudentTest{
    public static void main(String[] args){
        new Student(1, "jaebeom"); 
        new Student();//에러
    }
}
前のStudioクラスのジェネレータを定義したとします.上記の図のように、パラメータを受け入れないジェネレータを呼び出すとエラーが発生します.パラメータを受け入れないジェネレータを定義していないためです.
オーバーロードジェネレータ
コンストラクション関数のリロードとは、コンストラクション関数の名前を同じにし、パラメータの数とタイプに基づいて複数のコンストラクション関数を作成することです.(過負荷は、以降の方法で過負荷する場合に詳細処理を行う)
例を見てみましょう.
class Student{
    Student(){...}

    Student(String name){...}

    Student(String name, int id){...}
}
同じ名前のジェネレータは、パラメータの数とタイプに応じて複数定義できることがわかります.つまり、前の例のStudioオブジェクトのジェネレータ呼び出しの問題は、次のように解決できます.
class Student{
    int studentId;
    String studentName;

    Student(){}

    Student(int id, String name){
        studentId = id;
        studentName = name;
    }

    void showStudentInfo(){
        System.out.println("학생번호:"+studentId);
        System.out.println("학생이름:"+studentName);
    }
}

class StudentTest{
    public static void main(String[] args){
        Student student1 = new Student(1, "jaebeom");
        student.showStudentInfo();

        Student student2 = new Student();
        
    }
}
パラメータを受け入れないコンストラクション関数は、呼び出しに問題が発生しないように個別に定義することもできます.これが生成者の過負荷を必要とする理由である.