一、反射
反射:Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。
要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象。对于反射的操作实际上就是通过Class对象获取:
*a、java.lang.reflect.Field:提供有关类或接口的单个字段的信息,以及对它的动态访问权限。反射的字段可能是一个类(静态)字段或实例字段。操作类的成员变量。
*b、java.lang.reflect.Constructor<T>:操作类的够造函数。
*c、java.lang.reflect.Method:操作类的方法。
在学习反射基础前先创建一个Person对象作为实例:
public class Person {
private String name;
int age;
public String address;
public Person() {
}
private Person(String name) {
this.name = name;
}
Person(String name, int age) {
this.name = name;
this.age = age;
}
public Person(String name, int age, String address) {
this.name = name;
this.age = age;
this.address = address;
}
public void show() {
System.out.println("show");
}
public void method(String s) {
System.out.println("method " + s);
}
public String getString(String s, int i) {
return s + "---" + i;
}
private void function() {
System.out.println("function");
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", address=" + address
+ "]";
}
}
二、获取类的Class对象
三、java.lang.reflect.Constructor<T>:对象并使用Constructor类。
1、获取Constructor对象
2、通过 Constructor 对象创建Class对象所表示类的实例
四、java.lang.reflect.Field
1、获取Field对象
2、通过Field对象对指定类属性赋值
五、java.lang.reflect.Method
1、获取Method对象
2、通过Method对象调用指定类的方法