5日目(クラスとオブジェクト)


this


ロール#ロール#
  • 独自のメモリ命令
  • ジェネレータから他のジェネレータ
  • を呼び出す.
  • は、自分のアドレス
  • を返す.
    package thisex;
    
    class Birthday{
    	int day;
    	int month;
    	int year;
    	
    	public void setYear(int year) {
    		// year = year; 이렇게 쓰면 둘다 지역변수인 setYear의 인수 의미 - 의미업쓰
    		this.year = year; // 이렇게 해야 멤버변수 의미(파랑)
    	}
    	
    	public void printThis() {
    		System.out.println(this); //this가 뭘까용
    	}
    }
    
    public class ThisExample {
    
    	public static void main(String[] args) {
    		
    		Birthday b1 = new Birthday();
    		System.out.println(b1);
    		b1.printThis();	//b1의 주소를 this가 가르킴을 알 수 이따
    		
    		Birthday b2 = new Birthday();
    		System.out.println(b2);
    		b2.printThis(); //다른 인스턴스는 다른 주소 가르킴(b1과 b2의 주소 다름)
    
    	}
    
    }
    上のコードはthisの1、3つのロールを確認するコードです
    package thisex;
    
    class Person{
    	String name;
    	int age;
    	
    	public Person() {
    		this("이름없음", 1); // 이런 식으로 다른 생성자를 생성자에서 불러서 쓸 수 있다
    		//주의!!! 다른 생성자 쓸 때에는 반드시 다른 변수 선언이 먼저 있어서는 안된다
    		//다른 생성자 호출이 가장 먼저 이루어져야함(이유는 강의에서 이해 잘 안됨)
    	}
    	
    	public Person(String name, int age) {
    		this.name = name;
    		this.age = age;
    	}
    	
    	public Person returnSelf() {
    		return this;
    	}
    }
    public class CallAnotherConst {
    
    	public static void main(String[] args) {
    		Person p1 = new Person();
    		System.out.println(p1.name);	//이름없음
    		System.out.println(p1.returnSelf()); //자기자신
    		
    
    	}
    
    }
    ここでは、thisを使用してコンストラクション関数から他のコンストラクション関数を呼び出すことができます.

    オブジェクトのコラボレーション


    オブジェクトのコラボレーションは、オブジェクト内の他のオブジェクトが引数として使用され、オブジェクト間に相関がある場合に影響を与えることを意味します.
    ex)公共交通、学生をそれぞれ客体とする場合、学生という客体には公共交通に乗る機能とお金の変数があり、公共交通の機能を実行する場合、お金を減らすべきであり、公共交通客体にとって、乗車人員を増やし、お金を増やすべきではないでしょうか.
    この場合、オブジェクトのコラボレーションが必要です!
    public void takeBus(Bus bus) {
    		bus.take(1250);; //#########핵심 key!!!!!!!!!!!!
    		//요것이 객체의 "협업" 인 것이다
    		money -= 1250; //학생이 이만큼 돈 갖고있는지도 따져주면 더 좋겠쥬?
    	}
    上のコードは、StudentというクラスのTakeBusメソッドでBusオブジェクトを引数としてロードして使用するオブジェクトのコラボレーションです.
    バスも地下鉄もtakeの方法があるので、上層(抽象類)transで作成して管理することができます.
    この場合、studentクラスはbusや地下鉄ではなくtransという上位クラスと協力することができます.

    せいてきへんすう


    すべてのインスタンスが共有する値を宣言すると、静的変数として宣言されます.
    静的変数
    インスタンス変数はnew時にhipメモリに割り当てられます
    静的変数は、プログラム全体がメモリにロードされたときに割り当てられます(定数、文字などがあります).
  • 静的データ型変数名
  • ==クラス変数
  • インスタンスを作成せずにクラス名を直接参照
    ex) james.serialNum = 100;しない
    Student.serialNum = 100;

  • これらのインスタンスはhipメモリに割り当てられ、領域変数はスタックメモリに割り当てられ、静的、const、literalなどはデータ領域に割り当てられる.
    変数が示す静的同一(矢印など)

    リファレンス
    package staticex;
    
    public class Student {
    	int studentID;
    	String studentName;
    	
    	private static int serialNum = 10000;//정보 은닉을 위해 private
    	
    	public Student() {
    		serialNum++; //공유되면서 증가됨
    		studentID = serialNum; //공유X 각 인스턴스마다 다르게 됨
    	}
    	
    	public static int getSerialNum() {// getter만 사용(setter는 아예 사용X)
    		int i = 10; //이처럼 지역변수를 선언하는 것은 가능
    		//but!!!!!!!!!!
    		//StudentName = "Comet"; //이처럼 static method안에서 인스턴스 변수 선언은 불가능
    		// static 메소드는 인스턴스 변수를 메인에서 선언하지 않고도
    		//Student.getSerialNum으로 사용할 수 있는데, 이 경우에는 선언되지도 않은
    		//인스턴스 변수인 studentName이 호출된거기에 에러 발생!!!
    		
    		
    		return serialNum;
    	}
    }
    このコードを実行するプライマリコードも下に表示されます.
    package staticex;
    
    public class StudentTest1 {
    
    	public static void main(String[] args) {
    		Student studentJ = new Student();
    		System.out.println(studentJ.studentID); //10001
    		
    		Student studentT = new Student();
    		System.out.println(studentT.studentID); //10002
    		
    		System.out.println(studentJ.getSerialNum()); //이 둘은 공유되는 static 변수라
    		System.out.println(studentT.getSerialNum()); //같은 값이 들어있다
    		//이런식으로 안쓴다(인스턴스 변수가 아니라 클래스 변수.static으로 쓴다)
    		//Student.serialNum으로.
    		//인스턴스 생성 안해도 serial은 출력됨
    	}
    
    }
    この部分はコード内で注釈で詳細に説明されており,より多くの説明は省略されている.

    単一モード


    複数以外のオブジェクトを1つだけ作成する場合に使用
  • Cは世界で
  • できると発表した.
  • Javaクラス外で何も宣言できません
  • 静的代替
  • グローバル変数の使用
  • 個以上生成可能であるため、プライベート作成は生成者
  • をブロックする.
  • として宣言された共通の静的方法
  • を提供する.
    package singleton;
    
    public class Company {
    	
    	private static Company instance = new Company(); //내부에서 생성된 인스턴스
    	
    	private Company(){}//외부에서 Company()를 함부로 선언할 수 없다
    	
    	public static Company getInstance() {//getter
    		if(instance == null) {
    			instance = new Company();
    		}
    		return instance;
    		//static으로 메소드 생성 안해도 사용가능
    	}
    }
    うん.もしあなたが慣れていなければ、私は絶対に書けません.
    package singleton;
    
    import java.util.Calendar;
    
    public class CompanyTest {
    	public static void main(String[] args) {
    		Company company = Company.getInstance();
    		Company company2 = Company.getInstance();
    		
    		System.out.println(company);
    		System.out.println(company2);//같게나온다!
    		
    		
    		Calendar cal = Calendar.getInstance(); //이런것도 getInstance만 가능
    	}
    }