获取Class对象的方式: 1. Class.forName(“全类名”):将字节码文件加载进内存,返回Class对象多用于配置文件,将类名定义在配置文件中。读取文件,加载类 2. 类名.class:通过类名的属性class获取多用于参数的传递 3. 对象.getClass():getClass()方法在Object类中定义着。多用于对象的获取字节码的方式 示例: 创建两个简单类:
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; } } public class Student { }获取Class对象
import domain.Person; import domain.Student; /** * 获取Class对象的方法 * 1.Class.forName("全类名"):将字节码文件加载进内存,返回Class对象 * 2.类名.class:通过类名的属性class获取 * 3.对象.getClass():getClass()方法在Object类中定义着 */ public class ReflectDemo1 { public static void main(String[] args) throws Exception { //1.Class.forName("全类名") Class<?> cls1 = Class.forName("domain.Person"); System.out.println(cls1); //2.类名.class Class cls2 = Person.class; System.out.println(cls2); //3.对象.getClass Person p = new Person(); Class cls3 = p.getClass(); System.out.println(cls3); Student s = new Student(); Class cls4 = s.getClass(); System.out.println(cls4); //==比较三个对象 System.out.println(cls1 == cls2); System.out.println(cls1 == cls3); System.out.println(cls1 == cls4); } }程序演示:
结论: 同一个字节码文件(*.class)在一次程序运行过程中,只会被加载一次, 不论通过哪一种方式获取的Class对象都是同一个。