詳細なJavaオブジェクト指向のクラス16_Object

1.Objectクラスプレゼンテーション

Objectクラスとは何ですか?オブジェクトのクラスは、java.langパッケージに格納されているすべてのJavaクラス究極の親を(オブジェクトクラスは除きます)。もちろん、配列はまた、Objectクラスを継承しています。クラスが指定されていない場合は、そのベースは、クラス宣言、Objectクラスのデフォルトのベースクラスのキーワードを拡張します。

オブジェクトクラスは、次の
ここに画像を挿入説明
いずれかのJavaクラスは、これらのメソッドを継承し、最終的な方法をオーバーライドすることができる修飾されていません。例えば:NO最終変性のtoString()関数をカバーすることはできないが、待機最終()関数ができません。

Objectクラスのメソッドを簡単に:

公共の文字列のtoString()オブジェクトの文字列表現を返します。

パブリック ブールのequals(Object obj)指定されたオブジェクトと同じ二つのオブジェクトのアドレスかどうかを決定します。

公共の ネイティブは、 int型(ハッシュコード)をこのオブジェクト(話のコレクション)のハッシュコード値を返します。

公共 最終 ネイティブクラス<?>のgetClass()構成(反射的に言えば)情報、またはオブジェクトのクラスを得ました。

公共の 最終 無効待機()はスロー InterruptedExceptionあるが、

公共の 最終 ネイティブ 無効待機(長いタイムアウト)がスロー InterruptedExceptionあるが、

公共の 最終 無効待ち時間(長いタイムアウト、int型の nanos値)はスロー InterruptedExceptionあるが、

待機、通知またはウェイクアップするのnotifyAllの必要性(マルチスレッドについての話):上記の3つの方法の役割

公共の 最終 ネイティブ 無効)(通知。

公共の 最終 ネイティブ のnotifyAll();

これらの2つの方法の役割:ウェイク(話すマルチスレッド)

nativeキーワードの説明:

すべてのネイティブメソッドを使用してローカルネイティブメソッドの代表は、メソッド本体を変更されません。JavaはJavaのプログラムを展開するネイティブメソッドを使用するためのJavaは、Javaの不足のほか、伝統的なC ++はJavaは(などのハードウェア、など)基礎となるオペレーティング・システムに直接アクセスすることはできません、はるかに遅い速度よりもよりも、上で反映させるために、完璧ではありません機能。ネイティブメソッドは、Cプログラム、基礎となるオペレーティングシステムにアクセスするためのネイティブ改変方法を用いて、Javaプログラムインターフェイスと比較することができます。

2.toString方法

toStringメソッドは、実際には、オブジェクトの文字列表現を返し、文字列の内容は:オブジェクトの+ +型のハッシュコード。

[実施例]のtoStringの基礎となるコードの方法

public String toString() {
     return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

結果toStringメソッドなどのメモリアドレスを返し、そして開発において、多くの場合、我々は、オブジェクトの特性に応じて、対応する文字列表現を与える必要があり、したがって、それを書き換える必要があります。

[実施例]のtoString方法ケース書き換え

class TestDemo {
	String name;
	int age;
	public TestDemo(String name, int age) {
		this.name = name;
		this.age = age;
	}
	// 重写toString方法
	@Override
	public String toString() {
		return "TestDemo[name:" + name + " age:" + age + "]";
	}
}
public class ToStringDemo {
	public static void main(String[] args) {
		TestDemo demo = new TestDemo("小明", 18);
		// 输出:TestDemo[name:小明 age:18] 
		System.out.println(demo);
	}
}

3.equals方法

オブジェクトクラスは、2つのオブジェクトを比較する方法に等しく同じであり、それは、実際には2つのオブジェクトの比較に使用されるメモリアドレスです。Objectクラスのメソッドが==比較演算子が内部的に使用される等しいです。

[例]基礎となるコードを達成するための方法に等しいです

public boolean equals(Object obj) {
     return (this == obj);
}

[例]ユースケース方法に等しいです

// Demo类
class Demo {
	String name;
	int age;
	public Demo(String name, int age) {
		this.name = name;
		this.age = age;
	}
}
// 测试类
public class EqualsDemo {
	public static void main(String[] args) {
		Demo d1 = new Demo("小明", 18);
		Demo d2 = new Demo("小明", 18);
		// d1和d2是不同的两个对象,那么在堆中的地址肯定不相同
		System.out.println(d1 == d2);  // 返回:false
		System.out.println(d1.equals(d2)); // 返回:false
		// 此时,d3和d1都指向堆中同一块地址
		Demo d3 = d1;
		System.out.println(d1.equals(d3)); // 返回:true
	}
}

開発において、しばしば、多くの場合、オブジェクトの属性に応じて比較する方法に等しくサブクラスオーバーライドを開発する必要があるオブジェクトの属性に応じ比較し、2つのオブジェクトが同じであるかどうかを比較します。

[例]属性値が同じクラスデモあり判定する

// Demo类
class Demo {
	String name;
	int age;
	public Demo(String name, int age) {
		this.name = name;
		this.age = age;
	}
	/**
	 * 重写equals方法,判断属性是否全部相同
	 */
	@Override
	public boolean equals(Object obj) {
		// 1.判断传入的obj是否为null,为null则返回false
		if(obj == null) {
			return false;
		}
		// 2.判断地址是否相同,相同则返回true,否则继续判断属性是否相同
		if(this == obj) {
			return true;
		}
		// 3.依次判断对象中属性值是否相同,相同则返回true,否则返回false
		Parent p = (Parent)obj; // 强转
		if(this.name.equals(p.name) && this.age == p.age) {
			return true;
		}
		return false;	
}
}
// 测试类
public class EqualsDemo {
	public static void main(String[] args) {
		Demo d1 = new Demo("小明", 18);
		Demo d2 = new Demo("小明", 18);
		// 判断属性是否全部相同
		System.out.println(d1.equals(d2)); // 返回:true
	}
}

4.hashCode方法

hashCodeメソッドは、このオブジェクトのハッシュコード値を返し、この方法は、ハッシュテーブルの利点のためのいくつかのサポートを提供することであり、例えば、ハッシュテーブルたjava.util.Hashtableを提供しました。

我々は、オブジェクトの出力を指示し、@後の16進コードはハッシュ値です。

[実施例]方法ハッシュコードケースを使用

Person p = new Person();
System.out.println(p.hashCode()); // 输出:2018699554
System.out.println(p); // 输出:com.bjsxt.objectClass.Person@7852e922
// Integer.toHexString()方法是把哈希值转化为16进制
System.out.println(Integer.toHexString(p.hashCode())); // 输出:7852e922

hashCodeメソッドは、最終的な変更を使用しないため、すべての我々は、hashCodeメソッドを書き換えることができます。一般的には、hashCodeメソッドをオーバーライドする必要がありequalsメソッドを書き換えます。結果obj1.equals(OBJ2)が真である場合は、ハッシュコードOBJ1 OBJ2を起動できるオブジェクトとオブジェクトは確かに等しく、必ずしもハッシュコードが等しい満たしていないに等しく。しかし、効率を向上させるために、我々は、上記の2つの条件がほぼ同等である作ってみる必要があります。

PS:最新の無料のマニュアルと教育ビデオの場合は、QQグループ(627407545)を追加してください受けます。

公開された55元の記事 ウォンの賞賛0 ビュー792

おすすめ

転載: blog.csdn.net/zhoujunfeng121/article/details/104600445