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