Java反射机制是java较为重要的技术,在一些开源的框架例如:spring中得到了广泛的应用,动态代理设计模式的核心也是它。
Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。
java反射机制最核心就是使用java.lang包中的Class类,通过这个类可以实例化一个任意类的对象,并得到这个类的所有属性、所有方法等等(详情参考Class类的API文档)。
一、通过反射调用类中的方法
1.编写一个类Person
public class Person {
private String name;
private int 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 String talk(String name){
return "i am "+name;
}
}
2.编写main方法测试
public class Test {
public static void main(String[] args) {
String path="reflect.model.Person.talk";
int index=path.lastIndexOf(".");
try {
Class<?> c=Class.forName(path.substring(0, index));//实例化对象
Method method=c.getMethod(path.substring(index+1),String.class);//得到talk方法,参数类型为String
String s=(String) method.invoke(c.newInstance(), "hello");//调用方法,传递参数,将方法返回值赋值给s
System.out.println(s);
} catch (Exception e) {
e.printStackTrace();
}
}
}
java反射机制的应用还有很多,比如操作属性、调用set和get方法等等,就不一一举例了。
精彩科技工作室