一、創(chuàng)建類
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() : 獲取所有的非私有方法對象數(shù)組 獲取方法
Method[] methods=cls.getMethods();
for(Method method:methods){
System.out.println(method.getName());
}
}
三、反射的優(yōu)點及缺點
1.反射的優(yōu)點
- 靈活、自由度高:不受類的訪問權限限制,想對類做啥就做啥
2.反射的缺點
- (1)使用反射的性能較低
- (2)使用反射相對來說不安全
- (3)破壞了類的封裝性,可以通過反射獲取這個類的私有方法和屬性