3、獲取Class對象的三種方式
要想對字節碼文件進行解刨,必須要有字節碼文件對象
- Object類中的getClass方法
- 通過對象靜態屬性 .class來獲取對應的Class對象
- 只要通過給定類的字符串名稱就可以獲取該類,更為拓展
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