`
goalietang
  • 浏览: 25939 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

浅谈Java的反射(三) 字段的反射调用和赋值

阅读更多
      趁热打铁,让我们继续了解反射调用字段的相关,这里我们还是沿用User这个类,我们在里面设置了几个不同修饰符,不同类型的变 量,见代码:
	//静态的String类型的变量
	public static String field1 = "tangyu";
	//共有的String类型变量
	public String field2 = "qianjin";
	//私有的int类型变量
	private int field3 = 55;

      我们有了这些字段,现在我们在测试类中试试用反射如何去调用他们:

	@Test
	public void execute() throws Exception{
		//获取User类的字节码Class,并通过Class直接构造两个对象user1,user2
		Class clazz = Class.forName("com.ncs.tang.User");
		User user1 = (User) clazz.newInstance();
		User user2 = (User) clazz.newInstance();
		
		//public String field2 = "qianjin";
		//获取一个叫做field2的字段
		Field f2 = clazz.getField("field2");
        //反射调用这个字段的set方法将一个值set到user2对象中。
		f2.set(user2, "baobuping");
		System.out.println(f2.get(user1));
		System.out.println(f2.get(user2));
		
		//public static String field1;
		Field f1 = clazz.getField("field1");
		f1.set(null, "yuqiang");
		//因为是静态变量,不管修改user1还是user2对象里的这个字段的值
        //最后通过get获得的两个对象中的field1都会发生改变
		//当然因为是静态变量,你也可以在传入对象的地方传null值
		System.out.println(f1.get(user1));
		System.out.println(f1.get(user2));
		
		//private int field3 = 55;
		//获取私有的成员变量跟获取私有构造方法和私有方法的步骤相同。
		Field f3 = clazz.getDeclaredField("field3");
		f3.setAccessible(true);
		f3.set(user1, 99);
		System.out.println(f3.get(user1));
		System.out.println(f3.get(user2));
	}

      在此,我们可以看到,私有成员变量的调用其实跟之前一样,都用带有Declare的方法去调用,而且调用后获得对象还要打开访问权限。而静态变量是可以不通过类对象来调用的,而且只要发生改变,任何对象中的该静态变量都会发生改变。

      当然,我们其实在获取到字段的值之后,我们还需要做的严谨一点,因为我并不知道这个字段到底是什么类型,所以应该先获取这个字段的类型,判断如果类型是什么,之后再做相应的操作。代码如下:
	    //获取字段的值
		Object value = f2.get(user1);
		//获取字段的类型
		Class type = f2.getType();
		if (type.equals(String.class)) {
			//这个时候才类型强转并获得确切类型的值
			String svalue = (String)value;
		}
分享到:
评论

相关推荐

    java反射给指定字段赋值

    ### Java反射机制详解:给指定字段赋值 在Java编程语言中,反射是一个非常强大的功能,它允许程序在运行时检查或“反映”自身,并直接操作内部属性(如类、方法和字段)。本文将深入探讨如何利用Java反射来访问并...

    Java自定义注解使用反射获取字段注解

    本文将深入探讨如何通过反射机制来获取自定义注解以及其在字段上的应用。 首先,我们需要了解什么是自定义注解。自定义注解是以`@`开头,后跟自定义的名称。定义一个注解的基本结构如下: ```java import java....

    Java方法反射调用demo

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

    JAVA反射机制的入门代码

    这个特性使得Java具有了高度的灵活性和动态性,尤其是在处理元数据、创建对象、调用私有方法以及访问未导出的类等方面显得尤为有用。以下是对"JAVA反射机制的入门代码"的详细解释。 首先,我们要理解反射的基本概念...

    Java反射调用方法

    Java反射是Java语言提供的一种强大的动态类型特性,它允许程序在运行时检查和操作类、接口、对象等的内部信息,包括但不限于获取类的方法、字段、构造器等,并能动态调用方法和修改字段值。这个特性使得Java具有了更...

    frida反射调用对象中的方法与字段.pdf

    本文主要讲解了在遇到需要操作Java对象的参数或返回值时,如何利用Frida这一动态代码插桩工具来进行反射调用,包括调用对象的方法和获取对象的字段。Frida是一个强大的动态代码插桩工具,它可以注入到几乎所有的进程...

    Java反射性能测试分析

    为了准确评估Java反射的性能,我们设计了一系列基准测试,涵盖了反射操作的各个方面,如动态创建对象、设置和获取字段值、调用方法等。测试环境为标准的Java开发环境,采用最新的JDK版本,以确保结果的可靠性和...

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

    Java反射是Java语言提供的一种强大的动态类型特性,它允许程序在运行时检查类、接口、字段和方法的信息,并且能够动态地创建对象和调用方法。这个能力使得开发者可以突破静态类型的束缚,实现一些在编译时期无法完成...

    java反射机制给实体类相同字段自动赋值实例

    在Java编程中,反射机制是Java提供的一种强大的元数据访问工具,它允许程序在运行时检查和操作类、接口、字段和方法等对象。在上述的"java反射机制给实体类相同字段自动赋值实例"中,我们看到如何利用反射来实现两个...

    候捷谈Java反射机制

    反射API还提供了调用方法(`invoke()`)和设置/获取字段值(`set()`和`get()`)的功能。 在实际应用中,反射机制常用于以下场景: 1. 动态加载和执行代码:在某些情况下,可能需要在运行时根据用户输入或配置文件...

    Java 反射创建get set方法及反射方法的调用

    在Java编程语言中,反射(Reflection)是一种强大的技术,它允许程序在运行时检查类、接口、字段和方法的信息,并能够动态地创建对象和调用方法。本文将详细介绍如何利用Java反射来创建get和set方法,并演示如何通过...

    java 反射入门-属性方法调用实例

    在Java中,反射主要用于在运行时分析类和对象,包括类的方法、字段、构造器等信息。这篇博文将带你入门Java反射,并通过属性和方法的调用来实践这一概念。 首先,理解反射的基础概念。在Java中,`Class`类代表了...

    通过反射获得实体类的字段和值

    - 性能开销:反射涉及类型信息的查找和解析,比直接调用成员方法或访问字段慢得多。 - 安全性和性能问题:过度使用反射可能会引入安全漏洞,并影响应用程序的性能。 #### 5. 实践中的注意事项 - **性能考量**:在...

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

    在Java中,反射机制提供了强大的能力,包括在运行时检查类的结构、创建对象实例、调用方法以及访问和修改字段值。本文将深入探讨Java反射的相关知识点。 1. 常用`Class`类方法: - `Class.forName(String ...

    一个Java反射工具类,可以完成查询字段值以及设置字段值的功能

    一个Java反射工具类,可以完成查询字段值以及设置字段值的功能。

    java反射调用实例代码

    Java反射是Java编程语言中的一个强大特性,它允许在运行时检查类、接口、字段和方法的信息,并且能够在运行时动态地创建对象和调用方法。这个资源“java反射调用实例代码”提供了关于如何使用Java反射API进行各种...

    Java反射调用工具类

    这个“Java反射调用工具类”可能是为了简化和封装这些复杂的反射操作而创建的一个实用工具类。 首先,`JobProxy.java`可能是一个代理类,它利用反射来动态地调用目标对象的方法。在Java中,代理模式通常用于在不...

    JAVA反射机制动态调用 计算器对象的加法,减法函数;JAVA反射机制修改一个学生对象 的私有数据成员

    Java反射机制是Java语言提供的一种强大功能,它允许我们在运行时检查类、接口、字段和方法的信息,并且能够在运行时动态地创建对象和调用方法。这个机制在处理不确定类型或者需要灵活操作类的场景中非常有用。在这个...

    利用java反射技术实现动态搜索所有字段

    Java反射技术是Java编程语言中的一个强大工具,它允许程序在运行时检查并操作类、接口、对象等的内部信息,包括但不限于类名、方法名、参数类型以及字段。通过反射,开发者可以实现动态调用方法、访问私有成员、创建...

    利用反射实现JavaBean 的自动赋值

    1. **性能问题**:反射操作可能会导致性能下降,因为它涉及到了类的动态加载和方法的动态调用。 2. **安全性问题**:反射可以访问私有成员,这可能会破坏类的封装性,因此在使用时应谨慎。 3. **异常处理**:示例...

Global site tag (gtag.js) - Google Analytics