[21.07.14] Access Modifier


オブジェクトの値がどのように変化しているかを知る必要があります.

equals()


equals()関数は比較演算子==、!=同じ動作をするのと同じですが、比較する対象が参照タイプであれば?比較演算子はアドレス値を比較します.Stringは参照変数なので、==で比較した文字列とequals(文字列)で格納した空間が異なるので、比較した値も違います!
(修正21.07.21)
equals()の元の機能は,オブジェクトが同じかどうかを比較し,文字列を比較する場合,equals()はデータ内容を比較し,==アドレス値を比較する.

アクセス制限式


タイプの非公開の任意の場所で保護された同じパッケージ内のクラスにアクセスできます.または、アクセス継承されたクラスはプライベート宣言のクラスにのみアクセスでき、パッケージ内のクラスにのみアクセスできます(省略可能)
*使用範囲:privateメンバー変数、メソッド、作成者、クラスへのアクセス権を設定する式.ただし、クラスはpackageとpublicしか使用できません.オブジェクトを共通オブジェクトに設定すると、あちこちに書き込むと、必要な結果値が得られないという問題が発生する可能性があります.特定の機能で使用する必要があるクラスは主にprivateを使用します!
public class Test{
	private int n1; 
	int n2; 
	protected int n3; 
	public int n4;

---------------------------
Main{
Test t1=new Test();

これによりmainクラスにインスタンスが作成されるとprivateメンバー変数n 1は非表示に見えます~

classでのアクセス制限式


public class:任意の場所でインスタンスを作成できます
(package)class:同じパッケージに属するクラスのみからインスタンスを作成します.インポートできないクラス
public classの名前はjavaファイルの名前と同じでなければならないことに注意してください.1つのjavaファイルで複数のクラスを定義できますが、共通クラスは1つしか存在しません.

カプセル化


クラスを設計するときに、メンバー変数をprivateとして宣言し、外部クラスがフィールドに直接アクセスできるようにし、読み書きを回避します.これがパッケージです.必要に応じて、作成者を作成するときにprivateメンバー変数を間接的に読み込んだり、公開メソッドを定義したりすることができます.カプセル化してコードするとmainが短くなり、メンテナンスや可読性が良くなるのでしょうか?

オブジェクト内のオブジェクト

public class MyNumber {
	private int number;
    .
    .
    .
	public MyNumber add(MyNumber number) {
		this.number+=number.number;
		return this;
	}
}
ロシア人型のマットリシカのように、対象内に存在する形で書くことができます.クラスはデータ型ですので、戻りタイプとパラメータのデータ型でクラスタイプを指定して使用できます~
Main{

  MyNumber x=new MyNumber(1);
  MyNumber y=new MyNumber(2);
  MyNumber z=new MyNumber(3);
  MyNumber end =new MyNumber(4);
  x.add(y).add(z).add(end);
  System.out.println(x.getNumber());
  
  System.out.println("===================");
  
  MyNumber r1=x.add(y);
  MyNumber r2=r1.add(z);
  MyNumber r3=r2.add(end);
  System.out.println(r3.getNumber());
}
上記の2つのコードは同じ操作を実行します.上記のコードはステップの1回の加算がなく、以下はa->b->cストリームの順序で計算される.

[問題]2点間の距離を測る


2点間の距離d=√(x 1-x 2)² + (y1-y2)²
Math.sqrt():二値を返す平方根は二重です.
public class Point {
	//멤버변수
	private double x, y;
    
	//생성자
	public Point() {}
	public Point(double x, double y) {
		this.x=x;
		this.y=y;
	}
    
	//getter/setter 메소드
	public double getX() {
		return x;
	}
	public void setX(double x) {
		this.x = x;
	}
	public double getY() {
		return y;
	}
	public void setY(double y) {
		this.y = y;
	}
    
	//두 점 사이의 거리를 리턴하는 메소드
	public double distance(Point pt) {
		double d = Math.sqrt((this.x - pt.x) * (this.x - pt.x) + (this.y - pt.y) * (this.y - pt.y));
		return d;
	}
}
Point{}
Scanner sc = new Scanner(System.in);
Point pt1=new Point();
Point pt2=new Point();
		
System.out.println("첫번째 x값 입력>>");
pt1.setX(sc.nextDouble());
System.out.println("첫번째 y값 입력>>");
pt1.setY(sc.nextDouble());
System.out.println("두번째 x값 입력>>");
pt2.setX(sc.nextDouble());
System.out.println("두번째 y값 입력>>");
pt2.setY(sc.nextDouble());
		
System.out.println("두 점 사이의 거리 : "+pt1.distance(pt2));
sc.close();
Main{}
tip💡
  • エディタで、右マウスsource>...スーパークラス:基本ジェネレータ
  • を作成する
  • エディタで、右マウスsource>...using field:パラメータを使用して
  • を作成する
  • エディタで、右マウスsource>...getterとsetter:getterとsetter
  • を作成する

    課外学習🔍

  • 選択ソート
    最小の数値を検索して先頭の数値を置き換え、先頭の数値を除外して並べ替えを繰り返すソート方法.
    [4 2 1 5 8 6]
    1 2 4 5 8 6 i=0, j=0~5
    1 2 4 5 8 6 i=1, j=1~5
    1 2 4 5 8 6 i=2, j=2~5
    1 2 4 5 8 6 i=3, j=3~5
    1 2 4 5 6 8 i=4, j=4~5
  • i=0~length-1,j=i~length
  • を繰り返す.
  • jを繰り返すたびにクエリの最大値を配列の[i]値に入れ、最大値がある場合は[i]値
  • を入れる.
    for(int i=0;i<select.length-1;i++) { 
    	int min=Integer.MAX_VALUE;
    	for(int j=i;j<select.length;j++) {
    		if(min>select[j]) {
    			min=select[j];
    			temp=j;
    		}
    	}
    	select[temp]=select[i];
    	select[i]=min;
    }