Chapter 12. Java基本API(1)

46101 ワード

java.ほうそう
Java APIは様々なクラスを提供しており、その中で最も基本的なクラスはjavaです.langパッケージに含まれます.Javaプログラミングの基本パッケージなので、追加のインポートは必要ありません.
Objectクラス
JAvaのすべてのクラスは、直接または間接的に継承された最上位クラスです.
Javaのすべてのクラスの基本的な特徴を決定しました.
再定義可能メソッド

  • protected Object clone() throws CloneNotSupportedException()
  • オブジェクトをコピーして
  • を変換

  • public boolean equals(Object obj)
  • オブジェクトが同じかどうかを確認し、結果
  • を返します.

  • protected void finalize() throws Throwable
  • ごみ収集を実行するときの自動コール

  • public final Class getClass()
  • オブジェクトの実行クラス
  • を返します.

  • public int hashCode()
    オブジェクト
  • のハッシュコード値
  • を返す.

  • public String tostring()

  • オブジェクトを表す文字列に変換
  • clone():オブジェクトの参照(アドレス)値のみをコピーする浅いコピーではなく、参照ターゲット値(メモリ)の深いコピーをコピーします.
    再定義できないメソッド
    これらは同期に関連するスレッド制御方法である.

  • public final void notify()

  • public final void notifyAll()

  • public final void wait()

  • public final void wait(long timeout)

  • public final void(long timeout, int nanos)
  • test.clone.Point.java
    01 package test.clone;
    02
    03 public class Point implements Cloneable { 
    04     private int posX;
    05     private int posY;
    06
    07     public Point(int posX, int posY) {
    08          this.posX = posX;
    09          this.posY = posY;
    10     }
    11     @Override // clone 메소드 재정의
    12     public Object clone() throws CloneNotSupportedException {
    13         return super.clone();
    14     }
    15     /*** pos X, Y Getter & Setter ***/
    16     public int getPosX() {
    17         return posX;
    18     }
    19     public void setPostX(int posX) {
    20         this.posX = posY;
    21     }
    22     public int getPosY() {
    23         return posY;
    24     }
    25     public void setPosY(int posY) {
    26         this.posY = posY;
    27     }
    28 }
    test.clone.CloneEx.java
    01 package test.clone
    02
    03 public class CloneEx {
    04     public void testClone() {
    05         point p1 = new Point(10, 20);
    06         Point p2 = p1; // 얕은 복사 : p1의 주소를 복사한다.
    07         Point p3 = null;
    08
    09         try {
    10             p3 = (Point) p1.clone(); // 깊은 복사 : p1의 주소가 가리키는 값을 복사한다.
    11         } catch(CloneNotSupportedException e) {
    12             e.printStackTrace();
    13     }
    14
    15     // p2는 주소를 공유하므로 영향을 받지만, p3는 영향을 받지 않음
    16     p1.setPosX(111);
    17     p1.setPosY(222);
    18
    19     System.out.println("p1 = " + p1 + " : (" + p1.getPosX() + ", " + p1.getPosY() + ")");
    20     System.out.println("p2 = " + p2 + " : (" + p2.getPosX() + ", " + p2.getPosY() + ")");
    21     System.out.println("p3 = " + p3 + " : (" + p3.getPosX() + ", " + p3.getPosY() + ")"); 
    22     }
    23 }
    test.main.Main.java
    01 package test.main;
    02
    03 import test.clone.CloneEx;
    04
    05 public class Main {
    06     public static void main(String[] args) {
    07         new CloneEx().testClone();
    08         // Point 객체의 참조값은 컴퓨터에 따라 다를 수 있다.
    09    }
    10 }
    ------
    p1 = test.clone.Point@7852e922 : (111, 222)
    p2 = test.clone.Point@7852e922 : (111, 222)
    p3 = test.clone.Point@4e25154f : (10, 20)
    clone()関数を再定義するには、クローン可能なインタフェースを継承する必要があります.それ以外の場合、C l o n e N otSupportedException例外が発生し、対応する例外処理構文が必要になります.
    equals
    デフォルト型変数の値が同じかどうかを比較するには、演算子"=="が使用されますが、参照型変数の場合は、演算子"="が使用されると、参照するオブジェクトが同じかどうかが比較されます.
    次の例では、str 1とstr 2は異なるアドレスを持つため、簡単に比較するのはfalseですが、equals()を使用して参照タイプ変数の値が参照オブジェクトの値と同じかどうかを比較すると、戻りtrueが表示されます.
    test.equals.EqualsEx.java
    01 package test.equals;
    02
    03 public class EqualsEx {
    04 public void testEquals() {
    05     String str1 = new String("Apple");
    06     String str2 = new String("Apple");
    07
    08     System.out.println("str1 == str2 : " + (str1 == str2));
    09     System.out.println("str1.equals(str2) : " + str1.equals(st2));
    10     }
    11 }
    test.main.Main.java
    01 package test.main;
    02
    03 import test.equals.EqualsEx;
    04
    05 public class Main {
    06     public static void main(String[] args) {
    07     new EqualsEx().testEquals();
    08     }
    09 }
    ------
    st1==str2 : false
    st1.equals(str2) : true
    getClass()
    オブジェクトのランタイムクラスを返します
    JVMにロードされたターゲットクラスの情報を返します.
    test.getClass.GetClassEx.java
    01 package test.getClass;
    02
    03 import java.lang.reflect.Field;
    04 import test.clone.Point; // 포인트 객체는 clone 예제의 Point Class와 동일
    05
    06 public class GetClass {
    07     public void testGetClass() {
    08         Point point = new Point(10, 20);
    09
    10         Class cls = point.getClass();
    11
    12         System.out.println("getName() : " + cls.getName()); // 객체의 클래스 이름
    13         System.out.println("getSuperclass() : " cls.getSuperclass()); // 상위 클래스 이름
    14
    15         Field[] fields = cls.getDeclaredFields();
    16         for (field f : fields) {
    17         System.out.println("Field : " + f);
    18         }
    19     }
    20 }
    test.main.Main.java
    01 package test.main;
    02
    03 import test.getClass.GetClass;
    04
    05 public class Main {
    06     public static void main(String[] args) {
    07         new GetClass().testGetClass();
    08     }
    09 }
    ------
    getName() : test.getclass.Point
    getSuperclass() : class.java.lang.Object
    Field : private int test.getclass.Point.posX
    Field : private int test.getclass.Point.posY
    hashCode()
    オブジェクトに割り当てられたメモリにマッピングされた一意の整数をハッシュ値として返します.
    メモリの使用の安定性を保証するために、プログラムは直接メモリにアクセスすることを防止し、new演算子を使用してメモリを割り当てるときにアクセス可能なメモリのコードハッシュコードを生成します.
    test.hashcode.GetHashCodeEx.java
    01 package test.hashcode;
    02
    03 public class GetHashCodeEx {
    04     public void testHashCode() {
    05         Point point = new Point(10, 20);
    06
    07         System.out.println(point.hashcode());
    08     }
    09 }
    10 class Point { // Point 객체를 선언하여 hashCode 재정의
    11     int posX;
    12     int PosY;
    13
    14     public Point(int posX, int posY) {
    15         this.posX = posX;
    16         this.posY = posY;
    17     }
    18
    19     @Override
    20     public int hashCode() { // hashCode 메소드 재정의
    21         return "point HashCode : " + super.hashCode();
    22     }
    23 }
    test.main.Main.java
    01 package test.main;
    02
    03 import test.hashcode.GetHashCodeEx;
    04
    05 public static void main(String[] args) {
    06     public static void main(String[] args) {
    07         new GetHashCodeEx().testHashCode();
    08         // 실행 결과는 컴퓨터에 따라 다를 수 있다.
    09     }
    10 }
    ------
    point HashCode : 2018699554
    toString()
    オブジェクトの情報を目的のシェイプに戻す
    Objectクラスで定義されたtoString()
    public String toString() {
        return getClass().getName() + "@"
            + Integer.toHexString(hashCode());
    }
    TOStringが上書きされていない場合は、クラス名と16進hashCodeを返します.
    test.toString.ToStringEx.java
    01 package test.toString;
    02
    03 public class ToStringEx {
    04     public void testToString() {
    05         Point point = new Point(10, 20);
    06
    07         System.out.println(point);
    08         // System.out.println(point.toString());
    09     }
    10 }
    11
    12 class Point {
    13     int posX;
    14     int posY;
    15
    16     public Point(int posX, int posY) [
    17         this.posX = posX;
    18         this.posY = posY;
    19     }
    20
    21     @Override
    22     public String toString() { // toString 메소드 재정의
    23         return "point 객체 : (" + posX + ", " + posY + ")"
    24     }
    25 }
    test.main.Main.java
    01 package test.main;
    02
    03 import test.toString.ToStringEx;
    04
    05 public class Main {
    06     public static void main(String[] args) {
    07         new ToStringEx().testToString();
    08     }
    09 }
    ------
    point 객체 : (10, 20)