简单的方法如下:
Class<> cls=ClassforName(className);////////////////////////通过类的名称反射类
Object obj=clsnewInstance();//////////////////////对象实例化
Field field=clsgetField(fieldName);/////这个对应的是属性
fieldValue=fieldget(obj);////这个就是属性的值
反射说白了就是可以获得一个类的所有信息,主要包括方法和属性两部分。
1获得方法包括获得方法的名称,方法的返回类型,方法的访问修饰符,以及通过反射执行这个方法。
2获得属性包括属性的名称,类型,访问修饰符,以及这个属性的值。
这些获得都有相应的API提供 *** 作。
举个例子:
先定义一个类,有age这个属性,以及age的get和set方法:
public class TestRflectionFather {
public int age =32;
public int getAge() {
return age;
}
public void setAge(int age) {
thisage = age;
}
}
然后 *** 作获得所有方法:
import javalangreflectMethod;
public class Testmain {
public static void main(String[] args) throws Exception {
Class clazz = ClassforName("TestRflectionFather");
Method[] methods =clazzgetDeclaredMethods();
for(Method me:methods)
{
Systemoutprintln(megetName());
}
}
}
//最后输出
getAge
setAge
背景介绍:在一个Bean类中,需要通过反射机制获得private字段属性时,如果用通常获得步骤获得会报如下错误:javalangIllegalAccessException: Class Test can not access a member of class Bean with modifiers "private"at sunreflectReflectionensureMemberAccess(Reflectionjava:57)at javalangreflectFielddoSecurityCheck(Fieldjava:811)at javalangreflectFieldgetFieldAccessor(Fieldjava:758)at javalangreflectFieldget(Fieldjava:228)解决如下代码实现代码:1Beanclass内容如下:public class Bean {private String aa;}2Testclass内容如下:public class Test {public static void main(String[] args) throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException {Bean test = new Bean();Field f = BeanclassgetDeclaredField("aa");//其中,最关键的代码是://fsetAccessible(true);//这行代码把对象data上的name字段设置为public访问属性fsetAccessible(true);Systemoutprintln(fget(test));Systemoutprintln(fget(test));}}运行Test类输出如下:nullt2
java文件是源代码文件,必须要编译成class文件才能被JVM加载。使用ClassforName(类全名)动态加载类到jvm中。class文件必须位于classpath环境变量中的路径下。
以上就是关于java中如何通过反射获取类的属性全部的内容,包括:java中如何通过反射获取类的属性、说说对java反射的理解,使用反射如何获取一个类的所有方法,使用反射需要注意哪些问题、java中如何实现private反射获得对象字段值的等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)