java 中获取字节码对象的三种方式

时间:2021-09-09 17:07:35
package cn.ms.test;

public class GetClassObject {
    public static void main(String[] args) {
        getClassObjectMethod1();
        getClassObjectMethod2();
        getClassObjectMethod3();
    }
    
    /*
     * 方式一
     * 通过对象获得
     * */
    private static void getClassObjectMethod3() {
        GetClassObject getClassObject1 = new GetClassObject();
        System.out.println(getClassObject1.getClass().getName());
    }

    /*
     * 方式二 重点掌握
     * 通过给定类的字符串名称(全类名)就可获得该类的字节码文件对象,更为扩展。
     * (第一种和第三种都不具有扩展性)
     * */
    private static void getClassObjectMethod2() {
        Class<GetClassObject> getClassObject2 = null;
        try {
            getClassObject2 = (Class<GetClassObject>) Class.forName("cn.ms.test.GetClassObject");
            System.out.println(getClassObject2.getName());
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
    
    /*
     * 方式三
     * 任何数据类型都有一个静态的属性 .class来获取其对应类的字节码文件对象
     * 相对简单,但是还是要明确用到类中的静态成员。还是不够扩展!
     * */
    private static void getClassObjectMethod1() {
        Class getClassObject3 = GetClassObject.class;
        System.out.println(getClassObject3.getName());
    }
}