JAVA-09

32909 ワード

JAVA09


this

  • 等級宣言時内部宣言.
  • クラスは、複数のオブジェクトの共通の動作を定義する宣言時にメソッドを宣言します.1回の宣言は複数の対象に及ぶ.
    したがって、メソッドでフィールドを使用する場合は、どのオブジェクトのフィールドなのかを区別できません.したがって、オブジェクトまたはオブジェクトを作成できます.撮影が終わってシーンに近づいた瞬間、そのオブジェクトはthisの変数を受けます.
  • の結果、クラスがthisと宣言された場合.フィールド名でアクセスすると、複数のオブジェクトも1つの方法で使用できます.
    this:オブジェクトを区別する変数
  • このフィールドは、オブジェクトがアクセスするときのクラスを示すために使用されます.
    これはJavaのCloserですか?
  • package day09;
    
    public class ClassTest {
    	public static void main(String[] args) {
    		Car mycar = new Car("Ferrari","Red",65000);
    		Car momcar = new Car("K8", "White", 4000);
    		
    		System.out.println(mycar.brand);
    		System.out.println(momcar.brand);
    		// mycar의 this는 mycar의 class 주소값
    		mycar.engineStart();
            //momcar의 this는 momcar의 class주소값이다.
    		momcar.engineStart();
    	}
    }
    class Car{
    	String brand;
    	String color;
    	int price;
    	
    	//Alt + Shift + S > O : 필드를 이용해서 생성자 만들기
    	public Car(String brand, String color, int price) {
    //		 this는 클래스를 가르킨다. 즉, 클래스의 brand는 전역변수를 가르킨다.
    		this.brand = brand;
    		this.color = color;
    		this.price = price;
    	}
    
    	void engineStart() {
    		System.out.println(this.brand+" 시동 켜기");
    	}
    	void engineStop() {
    		System.out.println(brand+" 시동 끄기");
    	}
    }

    たけいせい


    マルチフォームの1つとしての過負荷について説明しましょう.

  • Overloading
    読み込み(宣言)メソッドが同じ名前を超えるメソッド(複数)
    パラメータの数やタイプが異なる場合は、同じ名前の方法で複数のパラメータを宣言できます.
    名前ではなくパラメータで区別されているからです.
    オーバーロードメソッドを使用すると、転送値のタイプまたは数に応じて適切なメソッドが自動的に呼び出されます.
    package day09;
    public class ClassTest {
    	public static void main(String[] args) {
    		Car mycar = new Car("Ferrari","Red",65000);
    		Car momcar = new Car("K8", "White", 4000);
    //		매개변수를 1개만 사용했더니 거기에 알맞은 메소드를 불러온다.
    		Car dadcar = new Car(31000);
    //		기본 생성자를 사용하면 기존방식으로 선언이 가능하다.
    		Car sistercar = new Car();
    		System.out.println(mycar.brand);
    		System.out.println(momcar.brand);
    		mycar.engineStart();
    		momcar.engineStart();
    		dadcar.engineStart();
    	}
    }
    class Car{
    	String brand;
    	String color;
    	int price;
    	//생성자 오버로딩
    	//클래스이름 + 자동완성 : 기본 생성자 만들기
    	public Car() {}
    	//Alt + Shift + S > O : 필드를 이용해서 생성자 만들기
    	public Car(String brand, String color, int price) {
    //		 this는 클래스를 가르킨다. 즉, 클래스의 brand는 전역변수를 가르킨다.
    		this.brand = brand;
    		this.color = color;
    		this.price = price;
    	}
    //	같은 이름의 메소드에 매개변수를 달리하여 사용할 수 있다.
    	public Car(int price) {
    		this.price = price;
    	}
    
    	void engineStart() {
    		System.out.println(this.brand+" 시동 켜기");
    	}
    	void engineStop() {
    		System.out.println(brand+" 시동 끄기");
    	}
    }
  • クラス・スキーマ


    複数のオブジェクトを宣言する必要がある場合は、アレイタイプを使用して一度に宣言した後に使用します.
    各オブジェクトに規則性がないため、規則性を付与するために使用されます.

    クラス配列宣言

    방법1.
    클래스명 [] 배열명 = {
    		new 생성자(),
    		new 생성자(),
    		...
    	}
    Car [] arcar = {
    	new Car("Ferrari","Red",65000),
        new Car("K8", "White", 4000),
        new Car(31000)
    }
    방법2.
    	클래스[] 배열명 = new 클래스명[칸수];
    メソッド2のように宣言できますが、スペースのみが宣言され、アドレス値のデフォルト値はnullです.
    したがって,上記のように宣言時には別途初期化すべきである.
    別途初期化しないと、NullPointerExceptionエラーが発生します.

    クラス配列の使用

    	배열명[idx] 방이 객체를 의미하게 된다.
    	배열명[idx].변수
    	배열명[idx].메소드();
    package day09;
    
    public class ClassArrayTest {
    	public static void main(String[] args) {
        //클래스 배열로 선언하였다.
     		Square[] arSquare = {
    				new Square("가나", 20, 8),
    				new Square("미니맵",	40, 40),
    				new Square("돈", 100, 25)
    		};
            //이제 클래스 객체들을 반복을 통해 접근이 가능해졌다.
            for (int i = 0; i < arSquare.length; i++) {
    			System.out.println(arSquare[i].getArea());
    		}
     	}
    }
    class Square{
    	String name;
    	double height;
    	double width;
    	
    	public Square(String name, double height, double width) {
    		this.name = name;
    		this.height = height;
    		this.width = width;
    	}
    
    	double getArea() {
    		return height*width;
    	}
    }

    クラスの作成


    説明:


    動物園の等級を確立し、3匹の動物を客体化することだ.
    ステップ数を外部から追加的に入力することは、ステップ数の増加に伴って動物が増加する数値を表す.
    動物が歩く値は数値の増加に伴って現れやすいので数値を制御した.

    コード#コード#

    package day09My;
    
    import java.util.Scanner;
    
    public class Zoo {
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    		Animal [] arAnimal = {
    				new Animal("검붉은 코끼리 땃쥐",4,1),
    				new Animal("마게이",10,30),
    				new Animal("마눌(Manul)",10,50)
    		};
    		for (int i = 0; i < arAnimal.length; i++) {
    			arAnimal[i].cry();
    		}
    		System.out.println("마게아가 몇 만큼 움직이게 하겠습니까?");
    		int step = sc.nextInt();
    		for (int i = 1; i <= step; i++) {
    			arAnimal[1].move();
    		}
    		System.out.println(arAnimal[1].name+"가(이) "+arAnimal[1].step+"만큼 움직였습니다.");
    	}
    }
    
    class Animal{
    	String name;
    	int age;
    	int weight;
    	int step;
    	public Animal(String name, int age, int weight) {
    		this.name = name;
    		this.age = age;
    		this.weight = weight;
    	}
    	void eat() {
    		System.out.println(this.name+"가(이) 먹습니다.");
    	}
    	void sleep() {		
    		System.out.println(this.name+"가(이) 잡니다.");
    	}
    	void move() {		
    		this.step++;
    		//System.out.println(this.name+"가(이) 움직입니다.");
    		//System.out.println(this.name+"가(이) "+this.step+"만큼 움직였습니다.");
    	}
    	void cry() {		
    		System.out.println(this.name+"가(이) 웁니다.");
    	}
    }