博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
18.4.2调用方法
阅读量:5242 次
发布时间:2019-06-14

本文共 1431 字,大约阅读时间需要 4 分钟。

package d18_4_2;/** * 一般情况下,我们并不能对类的私有字段进行操作,利用反射也不例外, * 但有的时候,例如要序列化的时候,我们又必须有能力去处理这些字段, * 这时候,我们就需要调用AccessibleObject上的setAccessible()方法来允许这种访问, * 而由于反射类中的Field,Method和Constructor继承自AccessibleObject, * 因此,通过在这些类上调用setAccessible()方法,我们可以实现对这些字段的操作。 * 但有的时候这将会成为一个安全隐患,为此, * 我们可以启用Java.security.manager来判断程序是否具有调用setAccessible()的权限。 * 默认情况下,内核API和扩展目录的代码具有该权限, * 而类路径或通过URLClassLoader加载的应用程序不拥有此权限。 *  * 方法的调用,其使用的构造方法必须是public,不能是其他类型 *  * setAccessbile方法属于AccessibleObject,不属于Method * 是通过反射来访问private方法、private构造器、private属性。 * java.lang.reflect  * 类 AccessibleObject * java.lang.Object * java.lang.reflect.AccessibleObject  * 所有已实现的接口:  * AnnotatedElement  * 直接已知子类:  * Constructor, Field, Method  */import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;public class MethodInvoke {	public static void main(String[] args) throws NoSuchMethodException,			SecurityException, IllegalAccessException,			IllegalArgumentException, InvocationTargetException,			InstantiationException {		Class c = Test.class;		Object obj = c.newInstance();		Method m = c.getDeclaredMethod("setName", String.class);		m.setAccessible(true);//指示该Method在使用时,取消java语言访问权限检查		m.invoke(obj, "张三");	}}class Test {	private String name;	private String getName() {		return name;	}	private void setName(String name) {		this.name = name;		System.out.println(this.getName());	}}

  

转载于:https://www.cnblogs.com/1020182600HENG/p/7360770.html

你可能感兴趣的文章
IList和DataSet性能差别 转自 http://blog.csdn.net/ilovemsdn/article/details/2954335
查看>>
Hive教程(1)
查看>>
第16周总结
查看>>
C#编程时应注意的性能处理
查看>>
Fragment
查看>>
比较安全的获取站点更目录
查看>>
苹果开发者账号那些事儿(二)
查看>>
使用C#交互快速生成代码!
查看>>
UVA11374 Airport Express
查看>>
P1373 小a和uim之大逃离 四维dp,维护差值
查看>>
NOIP2015 运输计划 树上差分+树剖
查看>>
P3950 部落冲突 树链剖分
查看>>
读书_2019年
查看>>
读书汇总贴
查看>>
微信小程序 movable-view组件应用:可拖动悬浮框_返回首页
查看>>
MPT树详解
查看>>
空间分析开源库GEOS
查看>>
RQNOJ八月赛
查看>>
前端各种mate积累
查看>>
jQuery 1.7 发布了
查看>>