您的位置:首页 > 其它

(转)Field getField(String name)与Field getDeclaredField(String name)的区别

2011-05-10 19:34 519 查看
Field getField(String name)返回已加载类声明的所有public成员变量的Field对象,包括从父类继承过来的成员变量,参数name指定成员变量的名称

而Field getDeclaredField(String name)不能获取从父类那继承过来的成员变量

***********************************************

package cn.com.vo;

public class Father {
public String name="父亲";

public String sex="男";

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getSex() {
return sex;
}

public void setSex(String sex) {
this.sex = sex;
}

}
+++++++++++++++++++++++++++++++++

package cn.com.vo;

public class Son extends Father{

//public String name;
public int age=20;

}
=========================================

package cn.com.vo;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

import cn.com.vo.UserVo;

public class TestReflect {

/**
* java反射机制
*/
public static void main(String[] args) {
try {
//类的动态加载
Class c=Class.forName("cn.com.vo.Son");//方式一
Son vo=(Son)c.newInstance();

Field f=c.getField("name");
System.out.println(f.get(vo));

//注意:下段代码会报错,
/*Field f2=c.getDeclaredField("name");
System.out.println(f2.get(vo));*/

} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchFieldException 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();
}
}

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