您的位置:首页 > 编程语言 > Java开发

反射机制 中的Method,Field 在private模式下怎么调用(enforce java language check 压制java语言检查)

2012-04-05 14:02 651 查看
代码1 method方法

package com.david6;

public  class PrivateTest
{
private  String  sayhello(String a)
{
return "hello " + a;

}
}

package com.david6;

import java.lang.reflect.Method;

public class TestPrivate
{
public static void main(String[] args) throws Exception
{
PrivateTest p = new PrivateTest();

//创建class对象
Class<?> classtype = p.getClass();

//使用method方法调用具体的sayhello方法,后面跟着new class[]{String.class}
Method method = classtype.getDeclaredMethod("sayhello" ,new Class[]{String.class});

//压制java语言的检查,setAccessible;true 表示压制,false表示不压制
method.setAccessible(true);

//通过invoke向P中下写入Object对象zhangsan
String str= (String)method.invoke(p,new Object[]{"zhangsan"});

System.out.println(str);

}
}


代码2 field方法

package com.david6;

public class Private2
{
private String name = "lisi";
public String namet()
{
return name;
}
}

package com.david6;

import java.lang.reflect.Field;

public class Private2Test
{
public static void main(String[] args) throws Exception
{
Private2 p = new Private2();
Class<?> classtype = p.getClass();

Field field = classtype.getDeclaredField("name");
field.setAccessible(true);   //压制java的访问控制
field.set(p,"lisi");         //使用set方法对p加入中的name变更

System.out.println(p.namet());
//

}
}


method与field 都是先生成class 对象,然后使用method或者field的getDeclaredMethod  ,getDeclaredField ,然后method使用invoke ,field使用set添加对象

setAccessible 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息