1. 程式人生 > >3、獲取Class物件的三種方式

3、獲取Class物件的三種方式

3、獲取Class物件的三種方式

要想對位元組碼檔案進行解刨,必須要有位元組碼檔案物件

  1. Object類中的getClass方法
  2. 通過物件靜態屬性 .class來獲取對應的Class物件
  3. 只要通過給定類的字串名稱就可以獲取該類,更為拓展

3.1 方式一:Object類中的getClass()方法

3.1.1 建立Person類

必須要明確具體的類,並且要建立物件,麻煩。

package com.hw.bean;

/**
 * @Description
 * @Author Administrator
 * @Date 2018/11/29
 */
public class Person {

    private String name;
    private int age;


    public void show() {
        System.out.println(name + "... show run ..." + age);
    }

    private void privateMethod() {
        System.out.println("privateMethod run...");
    }

    public void paramMethod(String str, int num) {
        System.out.println("paramMethod run..." + str + ": " + num);
    }

    public static void staticMethod() {
        System.out.println("staticMethod run ... ");
    }


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Person() {
        super();
        System.out.println("person run ...");
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
        System.out.println("person param run ... name=" + name);
    }
}
3.1.2 測試用例
/**
 * 獲取Class物件的三種方式
 * 1.Object類中的getClass()方法,必須要明確具體的類,並且要建立物件,麻煩。
 */
@Test
public void getClassObject_1() {
    Person person = new Person();
    Class clazz = person.getClass();

    Person person1 = new Person();
    Class clazz1 = person1.getClass();

    System.out.println(clazz == clazz1);
}

執行:

3.2 方式二:通過物件靜態屬性 .class來獲取對應的Class物件

相對簡單,但是還是需要先明確類中的靜態成員。不夠拓展。

/**
     * 通過物件靜態屬性 .class來獲取對應的Class物件
     */
    public void getClassObject_2() {
        Class clazz = Person.class;
    }

3.3 方式三:只要通過給定類的字串名稱就可以獲取該類,更為拓展,forName

/**
 * 方式三:只要通過給定類的字串名稱就可以獲取該類,更為拓展,forName
 */
@Test
public void getClassObject_3() throws ClassNotFoundException {
    String className = "com.hw.bean.Person";
    Class clazz = Class.forName(className);
    System.out.println(clazz);
}

執行: