反射主要是指程序可以访问,检测和修改它本身状态或行为的一种能力。
反射(Reflection)是java程序开发语言的特征之一,它允许运行中的java程序对自身进行检查,或者说是“自审”,并且能直接操作程序中的信息。
反射可以决定一个对象的类型
可以得到这个类的修饰符,字段,方法,构造器和父类的信息
可以找出一个接口中定义的常量和方法
反射其实是通过Class对象来调用类里面的方法
通过反射可以调用私有属性和私有方法,大部分框架都是运用反射原理。
使用反射的常规步骤:
反射调用一般分为3个步骤:
一 得到调用类的Class
二 得到调用类中的方法(Method)
三 最后方法调用(invoke) 实例如下:
主函数:
package lianxi1;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class lianxi {
public static void main(String[]args){
Lianxi1Brean lianxi1Brean = new Lianxi1Brean("靳浩东",18,1);
printInfo(lianxi1Brean);
Lianxi2Brean lianxi2Brean = new Lianxi2Brean("tom",19,1);
printInfo(lianxi2Brean);
}
public static void printInfo(Object obj) {
//把obj里所有get方法获取到,然后调用执行
Class clazz = obj.getClass();
Method[] methods = clazz.getDeclaredMethods();
for (Method method : methods) {
if(method.getName().startsWith("get")) {
System.out.print((method.getName()+":").replaceAll("get",""));
try {
Object result = method.invoke(obj);
System.out.println(result);
} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
e.printStackTrace();
}
}
}
}
}
类:
package lianxi1;
public class Lianxi1Brean {
private String name;
private int age;
private int sex;
public Lianxi1Brean(){
super();
}
public Lianxi1Brean(String name,int age, int sex){
super();
this.name=name;
this.age =age;
this.sex=sex;
}
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 int getsex(){
return sex;
}
public void setsex(int sex){
this.sex=sex;
}
}
类:
package lianxi1;
public class Lianxi2Brean {
private String name;
private int age;
private int sex;
public Lianxi2Brean(){
super();
}
public Lianxi2Brean(String name,int age,int sex){
super();
this.name = name;
this.age = age;
this.sex = sex;
}
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 int getsex(){
return sex;
}
public void setsex(int sex){
this.sex=sex;
}
}