Java
 Computer >> コンピューター >  >> プログラミング >> Java

JavaのgetClass()メソッドとは?使い方と実行例をわかりやすく解説

getClass()メソッドは、すべてのクラスの継承元となるObjectクラスで定義されており、Classクラスのインスタンスを返します。Javaでは、オブジェクトの新しいインスタンスを生成すると、そのインスタンスは必ず何らかのクラスに関連付けられます。JVM(Java仮想マシン)上では、同じクラスは1つだけロードされますが、そのクラスを参照するオブジェクトは複数存在できます。そのため、異なる2つのオブジェクトからクラス情報を取得した場合、両者が同じクラスを参照していることもあります。

構文

public final Class<?> getClass()

押さえておきたいポイント

  • finalメソッドのため、サブクラスでオーバーライドすることはできません。
  • 戻り値はClass<?>型であり、リフレクションAPIと組み合わせて利用されることが多いです。
  • 変数の宣言型ではなく、実行時に実際に生成されたオブジェクトのクラス(ランタイムクラス)を返します。

コード例

class User {
    private int id;
    private String name;
    public User(int id, String name) {
        this.id = id;
        this.name = name;
    }
}
class SpecificUser extends User {
    private String specificId;
    public SpecificUser(String specificId, int id, String name) {
        super(id, name);
        this.specificId = specificId;
    }
}
public class TestUser {
    public static void main(String[] args){
        User user = new User(115, "Raja");
        SpecificUser specificUser = new SpecificUser("AAA", 120, "Adithya");
        User anotherSpecificUser = new SpecificUser("BBB", 125, "Jai");

        System.out.println(user.getClass());
        System.out.println(specificUser.getClass());
        System.out.println(anotherSpecificUser.getClass());
    }
}

実行結果

class User
class SpecificUser
class SpecificUser

実行結果の解説

この例では、変数userはUserクラスのインスタンスを参照しているため、「class User」が出力されます。一方、specificUseranotherSpecificUserはどちらもSpecificUserクラスのインスタンスを生成しています。

特に注目すべきはanotherSpecificUserです。宣言時の型はUserですが、実際にnew演算子で生成されたオブジェクトはSpecificUserであるため、getClass()は「class SpecificUser」を返します。このように、getClass()メソッドは変数の宣言型ではなく、実行時の実際のオブジェクトの型を返す点が重要です。

この特性を活かして、getClass()はポリモーフィズムを利用したコードでの実際の型チェック、equals()メソッドの実装、デバッグやロギング、リフレクションによる動的な処理など、さまざまな場面で活用されています。

  1. Javaのpack()メソッドとは?使い方とsetSize()との違いを解説

    pack()メソッドは、JavaのWindowクラスで定義されているメソッドで、フレーム内のすべてのコンポーネントがそれぞれの推奨サイズ(preferred size)以上で表示されるように、ウィンドウのサイズを自動的に調整します。 代替手段として、setSize()メソッドやsetBounds()メソッドを呼び出して、フレームのサイズを明示的に指定する方法もあります。しかし一般的には、pack()メソッドを使用する方がsetSize()よりも推奨されています。その理由は、pack()がフレームのサイズ決定をレイアウトマネージャーに委ねることができ、レイアウトマネージャーはプラットフォーム間の

  2. JavaのSwingUtilities.invokeLater()メソッドの使い方を徹底解説

    invokeLater()メソッドとはinvokeLater()メソッドは、SwingUtilitiesクラスが提供するstaticメソッドの一つで、AWTイベントディスパッチスレッド(Event Dispatch Thread)上でタスクを非同期に実行するために使用されます。このメソッドはSwingUtilities.invokeAndWait()とよく似た動作をしますが、大きな違いは、処理のリクエストをイベントキューに登録した後、すぐに呼び出し元へ制御を返すという点です。つまり、invokeLater()は引数で渡されたRunnableオブジェクト内のコードブロックの実行完了を待ちません。