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