定义
Java反射机制是在运行状态中,对于任意一个类,都能知道这个类的所有属性和方法;对于任意一个对象,都能调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。
反射就是把Java类中的各种成分映射成一个个的Java对象。
实现
好处
1、可以在程序运行过程中,操作这些对象
2、可以解耦,提供程序的可拓展性
获取class对象的方式
1、Class.forName("全类名"):将字节码文件加载进内存,返回Class对象(多用于配置文件中,将类名定义在配置文件中,读取文件,加载类)
2、通过类名.class(多用于参数传递)
3、对象.getClass();getClass()方法在Object类中定义(多用于对象的获取字节码的方式)
Person类
package reflect;
public class Person {
private int age;
private String name;
public Person(int age, String name) {
this.age = age;
this.name = name;
}
public Person() {
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
三种方式打印类名
package reflect;
public class reflectDemo1 {
public static void main(String[] args) throws Exception{
// 1. Class.forName("全类名");
Class cls1 = Class.forName("reflect.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);
}
}
结果
结论
同一个字节码文件(*.class)在一次程序运行过程中,只会被加载一次,不论通过哪一种方式获取的Class对象都是同一个。