この記事は、オブジェクト クラスの詳細な分析 (写真とテキスト) を提供します。一定の参考価値があります。必要な友人が参照できます。お役に立てれば幸いです。
Object クラスのメソッドとは何ですか?
registerNatives() [基礎となる実装、未調査] hashCode()equals(Object obj)clone( )toString() Notice()notifyAll()wait(long timeout) [オーバーロードが 2 つあります] Finalize()Object には合計 11 のメソッドがあり、そのうちの 1 つは基礎となる実装 registerNatives() で、そのうち 2 つは wait() ですwait(long timeout, int nanos) オーバーロードされたメソッド。別の属性があります: return bytecode file object
hashCode
publicnative int hashCode();
native
# の基礎となるメソッドによって実装されます。 ##equalspublic boolean equals(Object obj) { return (this == obj); }
toStringハッシュ値が等しくない場合は、キーが等しくないことを直接判断できます。
- equals()
メソッドを書き直すには、メソッドをオーバーライドする必要があります。
hashCode()
- equals()
#hashCode()メソッドのデフォルトは比較オブジェクトのアドレスであり、
==と同等の操作 Character## を使用します。
- このメソッドには、基礎となる層がハッシュ テーブルであるオブジェクトのパフォーマンスを向上させる機能があります。
hashCode()同じオブジェクト (オブジェクトが変更されていない場合): then繰り返し呼び出します
- その後、返される int は同じになります。
hashCode()
- デフォルトのメソッドはオブジェクトのアドレスから変換されます
equals()
- メソッドには 5 つのデフォルトの原則もあります。
##再帰性--->
- equals()
を呼び出すと、2 つのオブジェクトのどちらが
- equals()## を呼び出したかに関係なく、true が返されます。 #すべて問題ありません、返されるものはすべて true
x.equals(y)Consistency--->オブジェクトが変更されていない限り、複数の呼び出しでも対応する結果が返されます。
推移性--->
- と
y.equals(z)- は両方とも true を返し、次のように結論付けることができます:
y.equals(x)x .equals(z)
Return trueSymmetry --->
x.equals(y)
および- の結果は次のようになります。等しい。
渡されたパラメータは null で、戻り値は false
- hashCode() が最下層としてハッシュ テーブルを使用すると言われる理由パフォーマンスを向上させるには? わかりやすい。 HashMap の挿入を確認してみましょう:
toString メソッドは、主に
identifyclone# に使用されます。 ##clone メソッドは、オブジェクトのクローンを作成するために使用されます。通常、クローンを作成するオブジェクトは
#wait、notify、notifyAll() のいずれであっても、ディープ コピーは、オブジェクトのすべてのメンバー変数を参照します。オブジェクト (変数参照の場合) を複製する必要があります。浅いコピーとは、メンバー変数が複製されていないことを意味します。
通信を提供する Java の API です。- オブジェクトの複製方法は?
- クローン オブジェクトは
- Cloneable インターフェイスを実装する必要があります
wait メソッドと Notify メソッドは、実際にはスレッド間の
- クローン メソッドをオーバーライドする必要があります、できれば public に変更する必要があります
- wait & Notice & NoticeAll
リスナー オブジェクト (ロック オブジェクト) によって呼び出される必要があります。 #簡単に言うと: これらはすべて同期されたコード ブロックで呼び出されます
。そうでない場合は例外がスローされます。
- notify()
は、キューで待機している- スレッドを起動します (どのスレッドが起動されるかはわかりません)。
wait()notifyAll( )
- 目覚めるのは待機キューですすべての スレッド
- を引き起こしたスレッドが目覚める 4 つの状況が考えられます
スレッドが中断されました
wait()時間が終了しました
- によって
によって目覚めましたnotify()
- was
notifyAll()
- 起きてください
- wait()
- を呼び出すスレッドは
ロックを解放します
- 待機と通知がオブジェクト メソッドにある理由
- 私たちの ロックはオブジェクト ロックであるため、 [忘れた場合は、Java ロック メカニズムを参照して詳細を確認してください] ため、すべてのオブジェクトがロックになる可能性があります。 現在のスレッドをオブジェクトのロックを待機させます。もちろん、このオブジェクトを通じて操作する必要があります。
- ロック オブジェクトは 任意であるため、これらのメソッドはオブジェクト クラスで定義する必要があります。
Thread.sleep()
と
Object.wait()# の両方## 一時停止できます 現在のスレッドは CPU 制御を解放します。主な違いは、
##ただし、次のことに注意してください:- Object.wait()
Thread.sleep()は
オブジェクト ロックの制御を解放すると同時に CPU を解放することです。 And- はロックを解放しません
#通知メソッドが呼び出された後、目覚めたスレッド はすぐにはロック オブジェクト を取得しません。代わりに、通知の同期コード ブロック
が実行されるまで待ってから、がロック オブジェクトを取得します。finalizefinalize()` メソッドは、の後にオブジェクトをクリアします。ガベージ コレクターは以前に呼び出されていましたが、このメソッドはいつ呼び出すべきか分からず、
不確実性があります一般的には書き換えません~ object は
1 回だけ呼び出されます。また、finalize() が呼び出されても、gc がそのオブジェクトをすぐにリサイクルするわけではないため、finalize() が呼び出された後、オブジェクトをリサイクルする必要がない可能性があります。リサイクルする、そして実際にリサイクルする必要があるとき リサイクルする場合、以前に一度呼び出されているため、finalize() が呼び出されず、問題が発生します。
以上がオブジェクトクラス(画像とテキスト)の詳細な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。