获取 Class 对象三种方式
- Class.forName(“类的路径”):先将类的字节码文件加载到内存,再返回 Class 对象;
- 类名.class:通过类名的 class 属性获取 Class 对象;
- 类的对象.getClass():创建类的对象,调用对象的 getClass() 方法获取 Class 对象,getClass() 方法在 Object 超类中已定义。
创建 Person 类
package cn.demo;
public class Person {
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
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;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
获取类的 Class 对象
package cn.demo;
public class ReflectDemo {
public static void main(String[] args) throws Exception {
Class cls1 = Class.forName("cn.demo.Person");
System.out.println(cls1);
Class cls2 = Person.class;
System.out.println(cls2);
Person person = new Person();
Class cls3 = person.getClass();
System.out.println(cls3);
System.out.println(cls1 == cls2);
System.out.println(cls1 == cls3);
}
}
打印结果
class cn.demo.Person
class cn.demo.Person
class cn.demo.Person
true
true
结论:同一个字节码文件(*.class)在一次程序运行过程中只会被加载一次,通过三种不同的方式获取的 Class 对象指向的是同一个对象。
|