java.lang.Object類-研究まとめ


一、概説:
    
  
ObjectクラスはすべてのJavaクラスの祖先です.各クラスは、スーパークラスとしてObjectを使用します.このクラスのメソッドは、すべてのオブジェクト(配列を含む)で実装されます.スーパークラスが明示されていない場合、Javaは自動的にObjectをクラスを定義するスーパークラスとして使用します.タイプがObjectの変数を使用して任意のタイプのオブジェクトを指すことができます.Objectクラスにはデフォルトの構造メソッドpubilc Object()があり、サブクラスインスタンスを構築する際に、このデフォルトの構築方法が呼び出されます.Objectクラスの変数は、様々な値の汎用所有者としてのみ使用できます.彼らに対していかなる専門的な操作を行うには、元のタイプを知ってタイプ変換する必要があります.例えば、Object obj=new MyObject()
      MyObject x = (MyObject)obj
ObjectクラスはすべてのJavaクラスのスーパークラスです.ClassクラスもObjectクラスのサブクラスです.
   Class      :public final class Class extends Object  implements Serializable, GenericDeclaration, Type, AnnotatedElement

Classクラスのインスタンスは、実行中のJavaアプリケーションのクラスとインタフェースを表します.列挙は一種であり、注釈はインタフェースである.各配列はクラスオブジェクトとしてマッピングされたクラスに属し、同じ要素タイプと次元数を持つすべての配列がクラスオブジェクトを共有します.基本的なJavaタイプ(boolean、byte、char、short、int、long、float、double)とキーワードvoidもClassオブジェクトとして表されます.
Classには共通の構造方法はありません.クラスオブジェクトは、クラスをロードするときにJava仮想マシンと、クラスローダのdefineClassメソッドを呼び出すことによって自動的に構築されます.
Classクラスの定義の詳細は、次のとおりです.http://www.javaweb.cc/JavaAPI1.6/java/lang/Class.html
二方法の概要
/*
 *  Object          。       Object     。    (    )         。 
*/
public class Object{
	public Object()//    
	protected Object clone()throws CloneNotSupportedException//                  
	public boolean equals(Object obj)//       obj    
	protected void finalize()throws Throwable//    :                     ,              。
	public final Class> getClass()//          ,           
	public int hashCode()//          
	public String toString()//            
	public final void notify()//                 
	public final void notifyAll()//                 。
	//            notify()     notifyAll()   ,           ,        。
	public final void wait(long timeout)throws InterruptedException
	/*
	 *             notify()     notifyAll()   ,
	 *               ,             ,        。
	*/
	public final void wait(long timeout,int nanos)throws InterruptedException
	//            notify()     notifyAll()    ,        。
	public final void wait()throws InterruptedException
}

三重点解読
1.hashCode()
   public int hashCode()

オブジェクトのハッシュ・コード値を返します.この方法をサポートするのは、java.util.Hashtableが提供するハッシュ・テーブルなどのハッシュ・テーブルのパフォーマンスを向上させるためです.
hashCodeの通常の協定は:
  • Javaアプリケーションの実行中、同じオブジェクトに対してhashCodeメソッドを複数回呼び出す場合、オブジェクトをequals比較する際に使用される情報が変更されていないことを前提として、同じ整数を一致して返さなければならない.あるアプリケーションの1回の実行から同じアプリケーションの別の実行まで、整数を一致させる必要はありません.
  • equals(Object)メソッドに従って2つのオブジェクトが等しい場合、2つのオブジェクトの各オブジェクトに対してhashCodeメソッドを呼び出すには、同じ整数結果を生成する必要があります.
  • equals(java.lang.Object)メソッドに従って2つのオブジェクトが等しくない場合、2つのオブジェクトのいずれかに対してhashCodeメソッドを呼び出すには、必ずしも異なる整数結果を生成する必要はありません.しかし,プログラマは,等しくないオブジェクトに対して異なる整数結果を生成することでハッシュテーブルの性能を向上させることができることを認識すべきである.

  • 実際には、Objectクラスで定義されたhashCodeメソッドは、異なるオブジェクトに対して異なる整数を返します.(これは一般に、オブジェクトの内部アドレスを整数に変換することによって実現されるが、JavaTMプログラミング言語ではこのような実現テクニックは必要ない.)
    戻り値:
    このオブジェクトのハッシュ・コード値.
    関連項目:
    equals(java.lang.Object),  Hashtable
    2. 
    equals
         public boolean equals(Object obj)
    他のオブジェクトがこのオブジェクトと「等しい」かどうかを示します.
    equalsメソッドは、空でないオブジェクト参照で等しい関係を実現します.
  • 自己反転:x.equals(x)は、空でない参照値xに対してtrueを返します.
  • 対称性:任意の非空参照値xおよびyについて、y.equals(x)がtrueを返す場合にのみ、x.equals(y)がtrueを返す.
  • 伝達性:任意の非空参照値x、y、およびzについて、x.equals(y)がtrueを返し、y.equals(z)がtrueを返す場合、x.equals(z)はtrueを返す.
  • 一貫性:オブジェクト上のequals比較で使用される情報が変更されていない場合、任意の非空参照値xおよびyに対して、x.equals(y)を複数回呼び出すと、常にtrueまたはfalseが返されます.
  • 非空参照値xの場合、x.equals(null)はfalseを返す必要があります.

  • Objectクラスのequalsメソッドはオブジェクト上の差の可能性が最も大きい等しい関係を実現する.すなわち、この方法は、空でない参照値xおよびyに対して、xおよびyが同じオブジェクトを参照している場合にのみtrueを返します(x==yは値trueを有します).
    注意:このメソッドが書き換えられる場合、hashCodeメソッドは、通常、hashCodeメソッドの通常の協定を維持するために書き換える必要があり、この協定は、等しいオブジェクトが等しいハッシュコードを有しなければならないことを宣言する.
    パラメータ:
    obj-比較する参照オブジェクト.
    戻り値:
    このオブジェクトがobjパラメータと同じである場合、trueが返されます.そうでなければfalseを返します.
    関連項目:
    hashCode(),  Hashtable
    3.toString
         public String toString()
    オブジェクトの文字列表示を返します.通常、toStringメソッドは、オブジェクトをテキストで表す文字列を返します.結果は簡明だが読みやすい情報式であるべきだ.
    このメソッドは、すべてのサブクラスに書き換えることをお勧めします.
    ObjectクラスのtoStringメソッドは、クラス名(オブジェクトはクラスのインスタンス)、atタグ「@」、およびこのオブジェクトのハッシュコードの符号なし16進数表現からなる文字列を返します.つまり、このメソッドは、次の値に等しい文字列を返します.
    getClass().getName() + '@' + Integer.toHexString(hashCode())
    

    戻り値:
    オブジェクトの文字列表示形式.例:Test@de6ced
    4.getClass
       public final Class> getClass()
    このObjectのランタイムクラスを します. されるClassオブジェクトは、クラスを すstatic synchronizedメソッドによってロックされたオブジェクトです.
    の タイプはClass extends|X|>であり、|X|はgetClassを び す の タイプを します.たとえば、 のコードクリップでは に する はありません.
    Number n = 0; Class extends Number> c = n.getClass();
    り :
    このオブジェクトのランタイムクラスを すClassオブジェクト.
    :
    The Java Language Specification, Third Edition (15.8.2 Class Literals)
    5.      :http://www.javaweb.cc/JavaAPI1.6/java/lang/Object.html