反射原理及优缺点:
参考博客:点击打开链接
相关操作代码:
public class ReflectTest {
public static void main(String[] args) {
try {
/*反射机制获取类有3种方法*/
//第一种方式
Class<?> cl1 = Class.forName("ref.Student");
//第二种方式
//java中每个类都有class属性
Class<?> cl2 = Student.class;
//第三种方式
//java语言中任何一个java对象都有getClass 方法
Student stu = new Student();
Class<?> cl3 = stu.getClass();
//创建实例
Student student = (Student)cl1.newInstance();
student.setName("张三");
student.setAge(19);
test1(student);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void test1(Object obj){
Class<?> cl = obj.getClass();
try {
//获取属性
Field[] field = cl.getDeclaredFields();
for(Field fld:field){
fld.setAccessible(true); //设置些属性是可以访问的
if(fld.getName().equals("name")){
fld.set(obj, "李四");
}
System.out.print("属性: "+fld.getName());
System.out.print("属性值是:"+fld.get(obj));
System.out.print(" 属性类型的名字是: "+fld.getType().getSimpleName());
System.out.println(" 修饰符: "+Modifier.toString(fld.getModifiers()));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}