クラスオブジェクトを取得する 6 つの方法

前書き:
Java プログラムがコンピュータ上で実行される場合、コード ステージ/コンパイル ステージ、クラス ステージ (ロード ステージ)、およびランタイム ステージという 3 つの主要なステージがあります。さまざまな段階で、さまざまなメソッドを通じてクラス オブジェクトを取得できます。
ここに画像の説明を挿入します


1. Class クラスの静的メソッド forName ("クラス パッケージ名.クラス名") を通じてインスタンスを取得します。

このメソッドの前提条件は、クラスの完全なクラス名が既知であり、そのクラスがクラスパス上にあり、クラス クラスの静的メソッド forName() を通じて取得できることですが、これにより classnotfoundException がスローされる可能性があります。
例:

//1 Class.forName
        String classAllPath = "com.test.Car";  //通过读取配置文件获取
        Class<?> cls1 = Class.forName(classAllPath);

アプリケーション シナリオ: 主に構成ファイル、フル パスの読み取り、クラスのロードに使用されます。


2. クラス名.class を使用して取得します。

特定のクラスが既知の場合は、そのクラスのクラスを通じて取得できます。この方法が最も安全で信頼性が高く、プログラムのパフォーマンスが最も高くなります。
例:

 //2 类名.class,应用场景,有对象实例
        Class cls2 = Car.class;
        System.out.println(cls2);

アプリケーション シナリオ: 主に、リフレクションを通じて対応するコンストラクター オブジェクトを取得するなど、パラメーターの受け渡しに使用されます。


3. object.getclass() を通じて取得

特定のクラスのインスタンスがわかっている場合は、そのインスタンスの getclass() メソッドを呼び出してクラス オブジェクトを取得します。
例:

//3. 对象.getClass(), 应用场景,有对象实例
        Car car = new Car();
        Class cls3 = car.getClass();
        System.out.println(cls3);

アプリケーションシナリオ: 作成されたオブジェクトを通じてクラスオブジェクトを取得します。


4. クラスローダーを通じてオブジェクトを取得する

クラス ローダーを通じてオブジェクトを取得するには、まずクラス ローダーを取得し、次にクラス ローダーを通じてクラス オブジェクトを取得する必要があります。
例:

//4.通过类加载器来获取类的class对象
           //(1)先获得类加载器 car
        ClassLoader    classLoader = car.getClass().getClassLoader();
           //(2)通过类加载器获取Class对象
        Class cls4 = classLoader.loadClass(classAllPath);
        System.out.println(cls4);


クラスオブジェクトを取得するための 5 つの基本データ型

例:

//5.基本数据 (int,char,boolean,float,double,byte,long,short) 按如下方式获得class对象
        Class<Integer> integerClass = int.class;
        Class<Character> characterClass = char.class;
        Class<Boolean> booleanClass = boolean.class;
        System.out.println(integerClass); //int

6 つの基本データ型に対応するパッケージング クラスは、.TYPE を通じて取得されます。

例:

 //6.基本类型对应的包装类,可以通过 .TYPE 得到Class类对象
        Class<Integer> type = Integer.TYPE;
        Class<Character> type1 = Character.TYPE;//其它包装类Boolean,Double,long,byte等等。

要約する

前の 4 つのメソッドを出力します

//cls1,cls2,cls3,cls4 其实是同一个对象
        System.out.println(cls1.hashCode());
        System.out.println(cls2.hashCode());
        System.out.println(cls3.hashCode());
        System.out.println(cls4.hashCode());

結果:

ここに画像の説明を挿入します


4 つのメソッドで取得されるオブジェクトはすべて同じです! これは、メモリ内には、どのように処理されても、クラス オブジェクト/ヒープが 1 つだけ存在し、1 つのクラスに対して、それに対応するクラス オブジェクトが 1 つだけ存在するためです。

おすすめ

転載: blog.csdn.net/a545__27/article/details/130919592