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);
}

運行:


本章節源碼: ReflectDemo


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM