はじめに:Objectクラスとは?
Javaを学び始めたばかりの方にとって、「Objectクラスって何?」という疑問はとても自然です。
Objectクラスは、Javaのすべてのクラスの親であり、Javaの世界ではこのクラスからすべてが始まります。あなたが作ったクラスも、自動的にこのObjectクラスを継承しています。
つまり、Objectクラスが持っているメソッドは、すべてのクラスで使えるということです!
本記事では、Objectクラスが持つすべてのメソッドを、図とサンプルコードを使いながら、初心者にもわかるようにやさしく解説します。
Objectクラスが持つメソッド一覧(図解)
以下は、Objectクラスが持つ主なメソッドを図で表したものです。
この図を参考にしながら、それぞれのメソッドの役割を見ていきましょう。
1. toString():オブジェクトを文字列にする
どんなメソッド?
オブジェクトの内容を文字列として表現します。
1 2 3 4 5 |
@Override public String toString() { return "User{name=" + name + "}"; } |
ポイント
- デフォルトではクラス名+ハッシュコードが表示される
- 独自にオーバーライドするのが普通
- ログ出力やデバッグに役立つ!
2. hashCode():オブジェクトのハッシュコードを返す
どんなメソッド?
ハッシュベースのコレクション(HashMapやHashSet)で使われるコードを返します。
1 2 3 4 5 |
@Override public int hashCode() { return Objects.hash(id, name); } |
ポイント
equals()
をオーバーライドしたら、必ず一緒にオーバーライドする!- 同じ内容のオブジェクトは同じハッシュコードにすべき
3. equals(Object obj):オブジェクト同士が等しいか?
どんなメソッド?
このオブジェクトと引数のオブジェクトが「等しい」かを判断します。
1 2 3 4 5 6 7 8 |
@Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null || getClass() != obj.getClass()) return false; User other = (User) obj; return this.id == other.id && Objects.equals(this.name, other.name); } |
ポイント
- 「同じアドレス」か「同じ内容」かを判断できる
hashCode()
との組み合わせが重要!
4. clone():オブジェクトをコピーする
どんなメソッド?
同じ内容を持つ別のオブジェクトを作ります(浅いコピー)。
1 2 3 4 5 |
@Override public User clone() throws CloneNotSupportedException { return (User) super.clone(); } |
ポイント
Cloneable
インターフェースを実装しないと使えない!- 複雑なオブジェクトなら「深いコピー(deep copy)」が必要
5. finalize():GCの直前に呼ばれる
どんなメソッド?
ガベージコレクションでオブジェクトが削除される直前に自動的に呼ばれます。
1 2 3 4 5 6 7 8 9 |
@Override protected void finalize() throws Throwable { try { System.out.println("リソースを解放します"); } finally { super.finalize(); } } |
ポイント
- 呼ばれる保証はない!
try-with-resources
の方が推奨される
6. getClass():実行時のクラス情報を取得
どんなメソッド?
このオブジェクトのクラス情報を取得します。
1 2 3 |
Object obj = "hello"; System.out.println(obj.getClass().getName()); // java.lang.String |
ポイント
- クラスの型チェックやリフレクションに使える
final
メソッドなのでオーバーライド不可
7. wait()、notify()、notifyAll():スレッド制御のためのメソッド
wait() 系
スレッドを一時停止して待たせるメソッド。
1 2 3 4 5 6 |
synchronized(obj) { while (!condition) { obj.wait(); // 通知があるまで待機 } } |
notify() / notifyAll()
他のスレッドを起こすメソッド。
1 2 3 4 |
synchronized(obj) { obj.notify(); // 一つのスレッドを起こす } |
ポイント
synchronized
ブロックの中で使う必要あり!- 最近は
java.util.concurrent
が推奨される
まとめ:ObjectクラスはJavaの基本の「き」
Objectクラスのメソッドは、どんなJavaプログラムでも使われている超基本の知識です。
特に以下のメソッドは、初心者のうちからしっかり理解しておくことが重要です:
toString()
equals()
/hashCode()
clone()
getClass()
次にすべきこと
自己学習するなら
Javaプログラマーを目指すなら、まずは「絶対にJavaプログラマーになりたい人へ。」を読んで、自己学習から始めましょう。
自信がない人は
- ソースコードのレビューをしてほしい
- 自分一人での学習が難しい
- プログラマー転職を本気で考えている
そんな方は「サイゼントアカデミー」のサポートを受けましょう!
おわりに
Objectクラスのメソッドは、一見地味ですが、Javaプログラミングの基盤です。
これらの知識を深めることで、今後の学習がグンと楽になります。
ぜひ、この記事をブックマークして、何度でも見返してくださいね!
コメント