[Java]OOPジェネレータ(Constructor)、ジェネレータthis()および参照変数this

13200 ワード

コンストラクション関数、コンストラクション関数this、および参照変数this
インスタンスが生成されるたびに呼び出される[インスタンス初期化メソッド](Instance Initialization Method)
//例:=オブジェクト、ivパッケージ
//インスタンス初期化:インスタンス変数に適切な値を格納
  • インスタンスの生成時に実行されるタスク(iv初期化).
  • ivの初期化を容易にするために、ジェネレータを作成します.
  • すべてのクラスには1つ以上のコンストラクション関数が必要です.
    Card c=new Card();
    
    //1. 연산자 new에 의해서 메모리에(Heap) Card 클래스의 인스턴스가 생성됨
    //2. 생성자 Card()가 호출되어 수행됨
    //3. 연산자 new의 결과로, 생성된 Card 인스턴스의 주소가 반환되어 참조변수 c에 저장됨   
    ジェネレータを作成する条件
    1)ジェネレータの名前はクラスの名前と同じである必要があります.
    클래스이름(타입변수명, 타입변수명, ... ) {
    	//인스턴스 생성 시 수행될 코드
        //주로 인스턴스 변수의 초기화 코드를 적는다.  
    }
    //클래스 Card와 생성자 Card의 이름이 같다 
    class Card {
    	...
        Card() { //매개변수 없는 생성자
        	//인스턴스 초기화 작업
        }
        Card(String kind, int number) { //매개변수 있는 생성자
        	//인스턴스 초기화 작업
        }
    }
    2)ジェネレータは値を返していません.(voidは付けません.)
    デフォルトのコンストラクタ:
    パラメータのない作成者
    클래스이름() { } //기본 생성자
    コンパイラは、コンストラクション関数が1つもない場合にのみ自動的に追加されます.
    一つは入れない.
    クラスを作成するときは、必ずデフォルトジェネレータを追加してください.
    //생성자 오류나는 예시 
    class Data_1 {
    	int value;
    }
    
    class Data_2{
    	int value;
        
        Data_2(int x) { //매개변수가 있는 생성자
        	value=x;
        }
    }
    
    class Ex6_11 {
    	public static void main(String[] args) {
        	Data_1 d1=new Data_1();
            Data_2 d2=new Data_2(); //컴파일 에러 발생 
        }
    }
    //생성자 오류 해결방법 : Data_2의 기본 생성자를 추가해준다. 
    //class Data_1도 기본 생성자가 없지만 컴파일러가 하나를 자동으로 추가해준다.  
    class Data_1 {
    	int value;
    }
    
    class Data_2{
    	int value;
        
        Data_2() { }
        Data_2(int x) { //매개변수가 있는 생성자
        	value=x;
        }
    }
    
    class Ex6_11 {
    	public static void main(String[] args) {
        	Data_1 d1=new Data_1();
            Data_2 d2=new Data_2(); //컴파일 에러 해결
        }
    }
    パラメータ付き作成者
    class Car {
    	String color; 
        String gearType; 
        int door; 
        
        Car() { } //기본 생성자
        Car(String c, String g, int d) { //매개변수가 있는 생성자
        	color=c;
            gearType=g;
            door=d;
        }
    }
    ジェネレータthis()
    コンストラクション関数から他のコンストラクション関数を呼び出すために使用します.
    他のジェネレータを呼び出す場合は、最初の行のみ使用できます.
    class Car2 {
    	String color; 
        String gearType; 
        int door;     
    
        Car2() { 
        	//Car2("white", "auto", 4);
        	this("white", "auto", 4); //Car2(String color, String gearType, int door) 호출
        }
        
        Car2(String color) { 
        	//Car2("white", "auto", 4);
        	this("white", "auto", 4); //Car2(String color, String gearType, int door) 호출
        }
        
        Car2(String color, String gearType, int door) { 
        	this.color=color; 
            this.gearType=gearType;
            this.door=door;
        }    
    }
    参照変数this
    インスタンス自体を指す参照変数.
    インスタンスメソッドには、使用可能なインスタンスアドレスが格納されます.
    領域変数(lv)とインスタンス変数(iv)の区別に使用
    すべてのインスタンスメソッドに領域変数として存在します.
    //コンストラクション関数this()と参照変数thisは関係のない概念ですが、違いますので混同しないでください
    Car(String color, String gearType, int door) {
    	//인스턴스변수(iv)에 this 붙여준다. this.color는 iv, color는 lv.
        this.color=color;
        this.gearType=gearType;
        this.door=door;
    }