一、创建类
import lombok.Data;
@Data
public class TestReflex{
private String name;
private int count;
public int getResult(int num){
return count=count+num;
}
protected String setName(String name){
return name;
}
}
二、对类进行操作
public static void main(String[] args) throws ClassNotFoundException,
IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {
//
Class<?> cls = Class.forName("xxx.xxx.xxx.TestReflex");
Object obj = cls.newInstance();
//调用非私有的方法
Method setFunc=cls.getMethod("getResult",int.class);
Object o=setFunc.invoke(obj,1);
System.out.println(o);
//获取指定的非公有类型的方法
setFunc=cls.getDeclaredMethod("setName",String.class);
//可以对一个实体类的访问级别进行重新的设定
setFunc.setAccessible(true);
o=setFunc.invoke(obj,"张三");
System.out.println(o);
//只能获取非私有属性
Field[] fields=cls.getFields();
for(Field field:fields){
System.out.println(field.getType()+"--"+field.getName());
}
//可以获取私有的属性 获取类中所有的属性(包括私有和仅有属性)
Field[] fields1=cls.getDeclaredFields();
for(Field field:fields1){
System.out.println(field.getType()+"--"+field.getName());
}
//getMethods() : 获取所有的非私有方法对象数组 获取方法
Method[] methods=cls.getMethods();
for(Method method:methods){
System.out.println(method.getName());
}
}
三、反射的优点及缺点
1.反射的优点
2.反射的缺点