java中如何通过反射获取类的属性

java中如何通过反射获取类的属性,第1张

简单的方法如下:

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反射获得对象字段值的等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9761646.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存