`

java 反射 获得属性值

    博客分类:
  • Java
 
阅读更多

通过java反射获得属性值

 

 

 

 

 

Java的反射非常强大,传递class, 可以动态的生成该类、取得这个类的所有信息,包括里面的属性、方法以及构造函数等,甚至可以取得其父类或父接口里面的内容。

obj.getClass().getDeclaredMethods();//取得obj类中自己定义的方法, 包括私有的方法。
obj.getClass().getMethods();//取得obj类中自己定义的方法及继承过来的方法, 但私有方法得不到。
同样, 对field也是一样,obj.getClass().getDeclaredFields();取得的是这个类中所有的属性,包括私有的field; 对obj.getClass().getFields();//取得是自己以及接继承来的属性, 但不能取得自己的私有属性。

Java代码 复制代码 收藏代码
  1. static Object create(Class clazz) throws Exception {
  2. Constructor con = clazz.getConstructor(String.class);
  3. Object obj = con.newInstance("test name");
  4. return obj;
  5. }
  6. static void invoke1(Object obj, String methodName)
  7. throws IllegalArgumentException, IllegalAccessException,
  8. InvocationTargetException, Exception, NoSuchMethodException {
  9. Method[] ms = obj.getClass().getDeclaredMethods();
  10. ms = obj.getClass().getMethods();
  11. for (Method m : ms) {
  12. // System.out.println(m.getName());
  13. if (methodName.equals(m.getName()))
  14. m.invoke(obj, null);
  15. }
  16. Method m = obj.getClass().getMethod(methodName, null);
  17. m.invoke(obj, null);
  18. }
  19. static void field(Class clazz) throws Exception {
  20. Field[] fs = clazz.getDeclaredFields();
  21. //fs = clazz.getFields();
  22. for (Field f : fs)
  23. System.out.println(f.getName());
  24. }
  25. static void annon(Class clazz) throws Exception {
  26. Annotation[] as = clazz.getAnnotations();
  27. }

      

例:

packagecom.juziku;

publicclassReflectPoint {
/**
* 私有变量x
*/
privateintx;

publicinty;
publicString str1 = "abc";
publicString str2 = "123";

publicReflectPoint(intx, inty) {
super();
this.x = x;
this.y = y;
}

}
packagecom.juziku;

importjava.lang.reflect.Field;

/**
* 反射例子
* @author sunlightcs
* 2011-3-5
* http://hi.juziku.com/sunlightcs/
*/
publicclassReflectTest {

publicstaticvoidmain(String[] args) throwsException{

ReflectPoint reflectPoint = newReflectPoint(3,5);

/**
* 通过反射,获得ReflectPoint属性的值
*
* reflectPoint.getClass()表示获得ReflectPoint的字节码,
* 当然也可以写成Field fieldY = ReflectPoint.class
* 或Class.forName("com.juziku.ReflectPoint");
* 获得某个类的字节码的方法有3种:
* ReflectPoint.class (类名.class)
* reflectPoint.getClass() (对象名.getClass())
* Class.forName("com.juziku.ReflectPoint") (Class.forName(类名的路径))
*
* reflectPoint.getClass().getField("y")表示获得ReflectPoint里y属性的位置
*/
Field fieldY = reflectPoint.getClass().getField("y");

/**
* fieldY.get(reflectPoint)表示获得reflectPoint对象里,y位置对应属性的值
*/
Object y = (Object)fieldY.get(reflectPoint);

/**
* 打印reflectPoint对象里,属于为y的值
*/
System.out.println(y);



/**
* 获得x属性的值,由于x属于为private类型,
* 所以要通过getDeclaredField方法查询x所在的位置
*/
Field fieldX = reflectPoint.getClass().getDeclaredField("x");

/**
* 由于x属于为private类型,也要设置成可访问,不然获取不到值
*/
fieldX.setAccessible(true);
Object x = (Object)fieldX.get(reflectPoint);
System.out.println(x);


/**
* 获得类型为String的所有值
*/
getStringValues(reflectPoint);


/**
* 修改str1属性的值
*/
onchageValue(reflectPoint);

}

privatestaticvoidgetStringValues(Object obj) throwsException{
/**
* 获得所有属性的位置
*/
Field[] fields = obj.getClass().getFields();

for(Field field : fields){
/**
* 这里建议用==,不建议用equals
* 如果field属性是String类型的话,那么跟String的字节码是同一份
*/
if(field.getType() == String.class){
String str = (String)field.get(obj);
System.out.println(str);
}
}
}

privatestaticvoidonchageValue(Object obj) throwsException{
Field field = obj.getClass().getField("str1");
System.out.println(field.get(obj));
field.set(obj, "22");
System.out.println(field.get(obj));
}

}

分享到:
评论

相关推荐

    java反射,获取所有属性、方法以及List集合类

    本篇文章将深入探讨如何使用Java反射来获取一个类的所有属性、方法,并处理List集合类。 首先,让我们了解Java反射的基础概念。在Java中,`java.lang.Class`类代表运行时的类信息。我们可以使用`Class.forName()`...

    java反射获取所有属性,获取所有get方法,包括子类父类

    总结,Java反射机制为我们提供了强大的动态性,能够方便地获取和操作类的属性和方法,包括私有成员和子类父类中的成员。通过熟练掌握反射技术,开发者可以实现更灵活、更动态的代码,但也需要谨慎使用,以避免潜在的...

    java 反射 调用私有方法(有参数私有方法)获取私有属性值

    以下是如何使用Java反射来调用私有方法并获取私有属性值的详细步骤: 1. **获取Class对象**:首先,我们需要获取到目标类的Class对象,这可以通过`Class.forName()`方法或者对象的`getClass()`方法来实现。例如,...

    java反射获取一个object属性值代码解析

    java反射获取一个object属性值代码解析 java反射获取一个object属性值代码解析是java编程中一个非常重要的知识点,通过反射机制,可以动态地获取一个object的属性值,无需提前知道该对象的类型。下面将详细介绍java...

    java 通过反射获取枚举类,及枚举类的值,枚举类枚举实例名

    这些代码可能包括创建枚举类,然后通过反射获取枚举值、实例名以及演示如何使用`getDeclaredConstructor()`和`newInstance()`方法来访问私有构造函数(虽然这不是常规用法)。 通过深入理解这些概念,你可以更好地...

    java 反射取得类的私有属性,通过私有属性取得属性值

    Java反射API提供了一系列类和接口,如`Class`、`Field`、`Method`等,它们让我们能够在运行时动态地获取类的信息,包括类的结构、方法签名以及字段等。这为编程提供了极大的灵活性,尤其是在处理第三方库或者进行元...

    java反射操作父类所有属性和方法

    通过上述示例,我们了解了如何使用Java反射机制来获取父类的所有属性和方法。这种方法非常灵活,适用于许多不同的场景,如框架开发、测试工具等。需要注意的是,虽然反射功能强大,但在生产环境中应谨慎使用,因为它...

    Java利用反射获取object的属性和值代码示例

    4.如何使用反射机制设置对象的属性值 5.反射机制的优缺点和使用场景 6.如何处理反射机制中的异常 这篇文章展示了Java反射机制的基本概念和使用方法,并提供了一个实用的例子来展示如何使用反射机制来获取对象的属性...

    Java方法反射调用demo

    Java反射是Java编程语言中的一个强大特性,它允许在运行时检查类、接口、字段和方法的信息,并且能够在运行时动态地创建对象和调用方法。这个特性使得Java具有了高度的灵活性,常用于框架开发、插件系统、元编程等...

    java 反射得到某个方法

    在本文中,我们将深入探讨如何使用Java反射来获取并执行某个特定的方法。 首先,我们需要了解Java反射的基本概念。`java.lang.Class`类是反射的核心,它代表了Java中的每一个类。我们可以通过以下方式获取到一个...

    反射获取属性调用方法反射获取属性调用方法

    反射获取属性和调用方法是其核心功能,广泛应用于框架设计、动态代理、插件机制等领域。下面将详细解释这两个概念。 1. 反射获取属性: 在Java中,`java.lang.reflect`包提供了`Class`类来获取类的信息,包括其...

    java反射 java反射 java反射java反射

    Java反射是Java编程语言中的一个重要特性,它允许程序在运行时动态地获取类的信息并操作类的对象。在Java中,反射机制提供了强大的能力,包括在运行时检查类的结构、创建对象实例、调用方法以及访问和修改字段值。...

    Java Bean 遍历和使用注解给Bean的属性添加属性值

    在给定的标题"Java Bean 遍历和使用注解给Bean的属性添加属性值"中,我们可以深入探讨两个主要主题:Java Bean的遍历和注解的应用。 1. **Java Bean遍历**: - **反射机制**:遍历Java Bean通常涉及使用Java的反射...

    反射获取类属性名和属性值

    利用反射获取实例化类的属性值和属性值!很实用,直接复制到控制台就行了!

    Java反射动态修改注解的某个属性值.Java

    本文将深入探讨如何通过Java反射来动态修改注解的某个属性值。 首先,了解注解的基本结构。注解是由`@`符号开始,后面跟着注解的名称和一组键值对组成的。例如,自定义注解`@MyAnnotation(name="test")`,其中`name...

    java反射获取参数.zip

    这个“java反射获取参数.zip”文件很可能是关于如何利用Java反射获取类的属性、方法,特别是对于List集合类的操作。 首先,我们来详细解释Java反射的基本概念。在Java中,每个类都有一个Class对象,这个对象包含了...

    利用反射机制动态获取对象属性名称及数据类型

    此外,`SetValue`方法使我们能够在运行时修改对象的属性值,展示了反射机制的灵活性。在实际开发中,反射机制常用于插件系统、配置管理、序列化和反序列化以及动态代码执行等场景。但需要注意的是,反射的使用会带来...

    用反射的方式获取父类中的所有属性和方法

    一旦我们有了`Method`或`Field`对象,就可以在运行时动态地调用方法或设置/获取属性值: ```java Object obj = ...; // 父类实例 method.invoke(obj, parameters); // 调用方法,parameters是参数数组 field....

    JAVA反射机制的入门代码

    Java反射机制是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。这个特性使得Java具有了高度的灵活性和动态性,尤其是在处理元数据、创建对象、调用私有方法...

    通过反射获取注解的属性值(源代码)

    通过反射获取注解的属性值 1、获取类上注解的值 1.1 定义注解类 1.2 定义使用注解的类 1.3 测试类 1.4 测试结果 2、获取属性变量上注解的值 2.1 定义注解类 2.2 定义使用注解的类 2.3 定义测试类 2.4 测试结果 3、...

Global site tag (gtag.js) - Google Analytics