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

JAVA反射Field使用

2015-10-20 12:05 411 查看
1.获取类的成员变量:

a)Class.getDeclaredField(String name);


     返回一个 Field
 对象,该对象反映此 
Class
 对象所表示的类或接口的指定已声明字段。


b)Class.getDeclaredFields();


     返回 Field
 对象的一个数组,这些对象反映此 
Class
 对象所表示的类或接口所声明的所有字段。


c)Class.getField(String
name)
;

     返回一个 Field
 对象,它反映此 
Class
 对象所表示的类或接口的指定公共成员字段。


d)Class.getFields()
;

         返回一个包含某些 
Field
 对象的数组,这些对象反映此 
Class
 对象所表示的类或接口的所有可访问公共字段。

     示例1:

public static int getPppoeType() {
int result = 14;
Class<ConnectivityManager> cls = ConnectivityManager.class;
Field[] fields = cls.getFields();
for (Field f : fields) {
if (f.getName().equals("TYPE_PPPOE")) {
try {
result = f.getInt(cls);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
break;
}
}
return result;
}
2.获取类反射方法:a)首先通过反射获取类的类型:
// 第一种方式:通过Class静态方法forName(返回与带有给定字符串名的类或接口相关联的 Class 对象)
try {
Class ClasscType1 = Class.forName("com.sunniwell.UserInfo");//必须加上包名,否则报错
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
// 第二种方式:java中每个类型都有class属性
Class ClasscType2 = UserInfo.class;

// 第三种方式:java语言中任何一个java对象都有getClass 方法
UserInfo userInfo = new UserInfo();
Class ClasscType3 = userInfo.getClass(); // ClasscType3是运行时类
b)其次通过newInstance创建类对象新实例:此方法要求对应类必须有无参的构造方法,否则无法创建。
// 第二种方式:java中每个类型都有class属性
Class ClasscType2 = UserInfo.class;
try {
Object object=ClasscType2.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}

3.执行方射方法: 

 a)结构:方法.invoke(类实例,参数); b)method.setAccessible(true);作用打破封装,获取权限用;

Class<? extends Class> vClass = herosClass.getClass();
try {
Method method1 = herosClass.getMethod("setName", String.class);
Method method2 = herosClass.getMethod("getName");
Object userInfo = herosClass.newInstance();// 创建新实例
method1.setAccessible(true);
method1.invoke(userInfo, "hello");
System.out.println("调用set方法:" + userInfo);
System.out.println("调用get方法:" + method2.invoke(userInfo));
} catch (Exception e) {
e.printStackTrace();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: