通过反射调用普通方法:
通过反射,调用类中的方法,通过Method类完成:
步骤:
1:通过Class类的getMethod(String name,Class...parameterTypes)方法取得一个Method对象,并设置此方法操作时所需要的参数类型。
2:之后使用Object invoke(Object obj, Objectll args)进行调用,并向方法中传递要设置的obj对象的参数信息。
Object invoke(Object obj, Object … args):
Object 对应原方法的返回值:
若原方法无返回值,此时返回null
若原方法若为静态方法,此时形参Object obj可为null
若原方法形参列表为空,则Object[] args为null
若原方法声明为private,则需要在调用此invoke()方法前:
显式调用方法对象的setAccessible(true)方法,才能访问private的方法
举例:
package Collections;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class person_text {
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, InvocationTargetException, NoSuchMethodException {
//获得Class对象
Class c1 = Class.forName("Collections.person");
//通过反射,调用普通方法
person user3 =(person)c1.newInstance();
//通过反射获取一个方法
Method setName = c1.getDeclaredMethod("setName",String.class);
setName.invoke(user3 ,"Lisa");//invoke:激活---->(对象,"方法的值")
System.out.println(user3.getName());
}
}
输出:
Lisa
通过反射操作属性:
package Collections;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import static java.lang.reflect.AccessibleObject.setAccessible;
public class person_text {
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, InvocationTargetException, NoSuchMethodException, NoSuchFieldException {
//获得Class对象
Class c1 = Class.forName("Collections.person");
//通过反射操作属性
person user4 =(person)c1.newInstance();
Field name =c1.getDeclaredField("name");
//不能直接操作私有属性 ,我们需要关闭程序的安全检测
//属性或者方法.setAccessible(true);
name.setAccessible(true);
name.set(user4,"jason");
System.out.println(user4.getName());
}
}
输出:
jason
setAccessible:
Method和Field、Constructr对象都有setAccessible()方法.
setAccessible作用是启动和禁用访问安全检查的开关
参数值为true,则指示反射的对象在使用时应该取消Java语言访问检查,这样做的目的是:
1:提高反射的效率。如果代码中必须用反射,而该句代码需要频繁的被调用,那么将其参数值设置为true
2: 使得原本无法访问的私有成员也可以访问
参数值为false,则指示反射的对象应该实施Java语言访问检查
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之家整理,本文链接:https://www.bmabk.com/index.php/post/81403.html