[JAVA]クラス/オブジェクト


クラスの構成メンバー


クラス宣言オブジェクトに持つ構成メンバー.
  • フィールド(フィールド)
  • 作成者(Constructor)
  • 方法
  • フィールド


    :オブジェクトデータを格納する場所
    宣言形式は変数(variable)に似ていますが、フィールドを変数とは呼びません.
    フィールドは、作成者とメソッド全体で使用され、オブジェクトが消えない限り、オブジェクトとともに存在します.
    フィールドはクラス内の任意の場所で宣言できますが、コンストラクション関数およびメソッドでは宣言できません.
    コンストラクション関数とメソッドの内部で宣言されている場合は、フィールドではなくローカル変数です.
    타입 필드 [= 초기값];
    このように宣言する.
    タイプ:基本タイプ(byte,short,int,long,float,double,boolean),参照タイプ(配列,クラス,インタフェース)
    フィールドの初期値:宣言可能、省略可能
    フィールドの初期値を省略すると、オブジェクトの作成時に自動的にデフォルトの初期値に設定されます.

    コンストラクタ


    :オブジェクトの作成時に初期化の役割を果たす
    [public] 클래스();
    ジェネレータはメソッドと似ていますが、タイプは返されず、クラス名と同じです.
    コンストラクション関数の内部では、フィールドに初期値を格納したり、メソッドを呼び出してオブジェクトの準備をしたりできます.
    フィールドが変数とメソッドと関数に似ている場合、ジェネレータは少し疎いです.
    ジェネレータはnew演算子とともに使用され、クラスでオブジェクトを作成するときに呼び出され、オブジェクトの初期化を担当します.
    ここでのコアは初期化オブジェクトです.
    すなわち、フィールドを初期化するか、メソッドを呼び出してオブジェクトを使用する準備をします.
    ジェネレータを実行しない限り、クラスからオブジェクトを作成できません.
    もし、私はクラスを作成しようと努力しましたが、ジェネレータを忘れましたか?
    幸いなことに、コンパイラはデフォルトジェネレータ(Default Constructor)をバイトコードに追加します.
    したがって,生成者を忘れて宣言しなくてもオブジェクトを生成することができる.
    では、ここで疑問に思うのは、なぜジェネレータを作成するのかということです.
    このような答えは、クラスから各オブジェクトを作成する際に、プリジェネレータのパラメータに対応する値を外部に入力することで作成できます.
    public class Person {
    	
        //field
        String nation = "대한민국";
        
    }
    このようなPersonというクラスを作成し、該当するオブジェクトを作成すれば、すべての国籍が「大韓民国」として作成される.
    しかし、私が大韓民国、米国、スイス国籍の相手を作りたいなら、どうすればいいだろうか.
    この場合、ジェネレータを利用すればよい.
    public class Person {
    	
        //field
        String nation ;
       	
        //constructor
        public Person (String n) {
        	nation = n;
        }
    }
    これによりジェネレータを作成し、パラメータnの値の国籍を入力してオブジェクトを作成すればよい.
    では、実行クラスコードを見てみましょう.
    public class PersonExample {
    	public static void main(String[] args) {
        
        	Person p1 = new Person("Korea");
            
            Person p2 = new Person("USA");
            
            Person p3 = new Person("Swiss");
        }
    }
            

    this


    Personクラスでコンストラクション関数パラメータをnと名付けました.
    (通常、フィールドとパラメータは、可読性のために同じ名前を使用します.)
    nじゃなくてnationだったら?
    ジェネレータの内部コードは次のとおりです.
    public Person(String nation) {
    	nation = nation;
    }
    では、両国のどちらがパラメータですか.
    もしあなたがプログラミング言語を勉強している人なら、=を基準に右側だと知っていますが、小学生が見ると?もちろん知りません.
    ただし、実際の理論フィールドとパラメータ名は同じであるため、コンストラクション関数内ではこのフィールドにアクセスできません.
    同じ名前のパラメータの使用優先度が高いためです.
    では、同じ名前のパラメータをどのように使用するかは、フィールドの前のthisです.貼ればいいです.
    public Person(String nation) {
    	this.nation = nation;
    }

    オーバーロードジェネレータ


    :複数のパラメータの異なる作成者を宣言
    Javaは、生成者のオーバーロード機能を提供し、さまざまなオブジェクトを簡単に宣言できます.
    ex)
    public class Car {
    	
        Car() { ...}
        Car(String model) {...}
        Car(String model, String color) {...}
        Car(String model, String color, int maxSpeed) {...}
    }
    パラメータのタイプ、パラメータの個数、宣言の順序が同じである場合、パラメータの名前変更のみが生成者過負荷と見なされないことに注意してください.
    ex)
    Car(String model, String color) {...}
    Car(String color, String model) {...} // 오버로딩 아님
    コンストラクション関数がオーバーロードされた場合、new演算子を呼び出すときに提供される各値のタイプと数によって呼び出されるコンストラクション関数が決定されます.
    //Execution Class
    public class CarExample {
    	public static void main(String[] args) {
        	
            Car car1 = new Car();
            
            Car car2 = new Car("자가용");
            
            Car car3 = new Car("자가용", "red");
        }
    }

    他のジェネレータthis()を呼び出す


    複数のAPI(ライブラリクラス)を作成する必要がある場合は、コード内部のコンストラクション関数を大量にロードする必要がありますか?
    もちろん、重複するコードは多く発生します.
    もちろん人間なら面倒なのは当たり前.
    これに対してthis()があり、他のジェネレータを呼び出すことができます.
    初期化コンテンツを持つ作成者を呼び出すことで、フィールドの初期化コンテンツを1つの作成者に集中して改善します.
    this()は、コンストラクション関数の最初の行のみを許可する必要があります.
    // 중복된 코드가 있는 생성자 오버로딩 예시
    Car(String model) {
    	
        this.model = model;
        this.color = "silver";
        this.maxSpeed = 250;
    }
    Car(String model, String color) {
    	
        this.model = model;
        this.color = color;
        this.maxSpeed = 250;
    }
    Car(String model, String color, int maxSpeed) {
    	
        this.model = model;
        this.color = color;
        this.maxSpeed = maxSpeed;
    }
    
    これらのコードは以下のように変更できます.
    public class Car {
    	
        //field
        String company = "hyundai";
        String model;
        String color;
        int maxSpeed;
        
        //constructor
        Car() {
        
        }
        
        Car(String model) {
        	this(model, "silver", 250);
        }
        
        Car(String model, String color) {
        	this(model, color, 250);
        }
        
        // 공통 실행 코드
        Car(String model, String color, int maxSpeed) {
        	this.model = model;
            this.color = color;
            this.maxSpeed = maxSpeed;
        }
    }
        

    メソッド(Method)


    :オブジェクトの動作
    メソッドは、フィールドの読み取りと変更、さまざまな機能を実行するための他のオブジェクトの作成、オブジェクト間のデータの転送、外部からのパラメータの受信、実行後に値を返すなどの作業を行います.
  • メソッドの宣言は、戻りタイプ、メソッド名、パラメータ宣言、および実行内容から構成される.
  • 戻りタイプ-
  • は存在しない可能性があります.
  • メソッド名-実行された機能を理解するために名前を作成します.
    (メソッド名の長さはプログラムの実行に関係なく)
  • パラメータ宣言
  • パラメータが分からない場合は、解決策は配列タイプとして宣言します.
    int sum(int[] values) { }
    このメソッドを呼び出すと
    int [] values = {1, 2, 3};
    int result = sum(values);
    
    int result = sum(new int[] {1,2,3,4,5});
    上のコードは何か不便なところがありますか?
    配列が参照タイプであるため、配列を作成して呼び出す必要があります.
    したがって,配列を生成せずに値のリストのみを渡す方法がある.
    そうです.使用します.
    int sum(int ... values) { }
    では、呼ぶとき.
    int result = sum(1,2,3);
    記入するだけです.