`
luoxiaohui_java
  • 浏览: 13208 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Java反射机制学习(二)

阅读更多

先来看一个通过反射来动态给变量赋值的:

package com.reflect.demo;

public class Student {

	public String name;

	public  Integer age;

	public Integer getAge() {
		return age;
	}

	public void setAge(Integer age) {
		this.age = age;
	}

	public String getName() {
		return name;
	}

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

	public Student(String name, Integer age) {
		super();
		this.name = name;
		this.age = age;
	}

	public Student() {
		super();
	}

}
package com.reflect.demo;

import java.lang.reflect.Field;

public class BaseTest {

	public static void main(String[] args) throws SecurityException,
			NoSuchFieldException, IllegalArgumentException,
			IllegalAccessException {
		Student stu1 = new Student();
		Field nameField1 = Student.class.getField("name");
		nameField1.set(stu1, "张三");
		System.out.println("学生1的姓名为:" + stu1.getName() + " \t 年龄为:"
				+ stu1.getAge());

	}

}

 

通过反射机制来实现在程序运行中动态给变量赋值,需要考虑以下几点:

 

1)如何获取相应的Filed,Method对象?

2)怎样将动态的值设置到目标对象?

3)碰到私有域变量Field和方法Method如何处理?

 

 

对于第一点,主要是获取Class对象。有三种方法获取Class对象

a.   类名.class   b. 对象名.getClass()  例如用stu1.getClass()代替 Student.class结果完全一样

c.   Class.forName("类名");

 

对于第二点,代码nameField1.set(stu1, "张三");是关键,第一个参数即为目标对象。亦即通过Field对象的

set方法给对象stu1的name属性赋值。

 

对于第三点,若要给age赋值,但age在Student类中是私有变量,是不容许外部类访问的。这时候想起上一章节中

提到的抽象类AccessibleObject提供了setAccessible方法,该方法可以跳过Java 语言访问控制检查。

 

 

代码如下:

Student stu1 = new Student();
       Student stu2 = new Student();
       Field  nameField1 = stu1.getClass().getField("name");
       nameField1.set(stu1, "张三");
       System.out.println("学生1的姓名为:"+stu1.getName()+" \t 年龄为:"+stu1.getAge());
       
       
         Field  ageField2 = stu2.getClass().getDeclaredField("age");
       ageField2.setAccessible(true);
       ageField2.set(stu2, 18);       
       System.out.println("学生2的姓名为:"+stu2.getName()+" \t 年龄为:"+stu2.getAge());
  

 

 

还有得注意的是:

 1)、注意getField与getDeclaredField的区别:两者都是java.lang.Class类提供的方法,前者用于取指定类或接口的公有属性,而age是私有属性必须用后者来获取。

 

2)、在此不能用ageField2.setInt(stu2,18)代替ageField2.set(stu2, 18),这里做了严格的校验,Student中age属性采用了Integer类型。

 

 

分享到:
评论

相关推荐

    java面试题--反射机制

    #### 二、Java反射机制简介 Java反射机制允许程序在运行时获取类的信息,这使得Java具有了一定程度上的动态性。具体来说,Java反射机制提供了以下功能: 1. **获取类的信息**:可以在运行时获取类的修饰符、父类、...

    Java反射机制学习总结

    Java反射机制是Java编程语言中一个强大的工具,它允许程序在运行时动态地获取类的信息并操作类的对象。反射机制的核心在于java.lang.reflect包中的API,主要包括Class类、Constructor类、Method类和Field类。以下是...

    Java反射机制的学习

    Java反射机制是Java编程语言中的一项核心特性,它允许程序在运行时动态地获取类的信息并进行操作。这使得Java能够在编译后仍然能够灵活地处理类和对象,增强了代码的动态性。在Android应用开发中,反射机制尤其重要...

    Java反射机制的使用和学习方法

    Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、对象等的内部信息。这一机制对于理解和实现高级框架、动态代理、元数据处理等场景至关重要。以下是对Java反射机制的详细说明:...

    JAVA反射机制学习

    在"JAVA反射机制学习"资料中,你将深入理解这一关键概念。 首先,我们要明白什么是反射。在Java中,反射是一种在运行时分析类、接口、字段和方法的能力。通过使用`java.lang.Class`对象,我们可以获取任何类的信息...

    北大青鸟java反射机制

    在"北大青鸟java反射机制"的学习资料中,我们将会深入探讨这一核心特性。 首先,我们要理解反射的核心概念:在程序运行时,通过Class对象获取类的信息,包括类名、属性、方法等,并能够动态地创建对象和调用方法。...

    java反射机制学习

    Java反射机制是Java编程语言中的一种强大功能,它允许程序在运行时检查和操作类、接口、字段和方法的信息,即使在编译时这些信息是未知的。这一特性使得Java在某种程度上具备了动态语言的特性,尽管Java本身是一种...

    一个例子让你了解Java反射机制

    Java反射机制是Java编程语言中的一个重要特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射机制的核心类集中...在实践中学习,你会更好地理解Java反射机制的威力和应用场景。

    java反射机制学习笔记+反射机制实操案例

    总结来说,Java反射机制是Java语言的一个重要特性,它使得程序能够在运行时动态地获取类的信息并进行操作,提高了代码的通用性和适应性。在实际开发中,反射机制常用于框架设计、插件系统、数据持久化等领域,但同时...

    JAVA反射机制的入门代码

    总的来说,"JAVA反射机制的入门代码"是初学者理解Java反射机制的好教材,通过它,你可以学习如何动态地操作Java类,提高代码的灵活性,并掌握处理`properties`文件的基础方法。在深入学习和实践中,你将进一步理解...

    Java 反射机制 代码的实例

    Java反射机制是Java编程语言中的一个强大特性,...通过学习和实践Java反射机制,你可以更深入地理解Java的运行机制,并在需要动态性、灵活性的场景中发挥其强大的功能。不过,使用反射时也应注意潜在的风险和性能影响。

    java学习笔记(java 反射机制 流 内存管理)

    本笔记主要涵盖了四个核心知识点:Java反射机制、流(I/O流)、内存管理和Java学习的基础。以下是对这些主题的详细阐述: 一、Java反射机制 Java反射机制是Java语言的一个强大特性,允许程序在运行时检查类、接口、...

    java反射机制原理和反射机制总结

    Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、字段以及方法等对象。这一机制的核心在于`java.lang.Class`类和相关的API,它们提供了对类元数据的访问,使得我们能够在运行时...

    利用java反射机制的建议计算器源码

    通过这个例子,新手可以学习到如何使用Java反射机制来增强代码的动态性,以及如何设计可扩展的系统。反射在很多场景下都很有用,例如在插件系统、序列化、动态代理等领域都有广泛应用。然而,需要注意的是,反射也...

    java反射机制学习笔记

    Java反射机制是Java编程语言的一项重要特性,它允许程序在运行时动态地获取类的信息,并且能够对类的属性和方法进行操作。反射机制的核心在于Java的`java.lang.reflect`包,其中包含了`Class`、`Constructor`、`...

    java反射机制.xmind

    自己总结的java反射机制的笔记,绘制了详细的思维导图,每个思维导图中均有详细的博文解释,方便大家学习和理解,免费分享给大家。适合java的爱好者和学习者

    JAVA反射机制的学习

    JAVA反射机制的学习.mht

    java反射机制文档及代码

    Java反射机制是Java编程语言中一个...通过阅读"1139760298222java.pdf"这份文档,你可以更深入地理解Java反射机制,并结合实际示例学习如何在项目中有效利用这一特性。记得在实际操作中结合代码实践,以巩固理论知识。

    java学习笔记java反射机制

    java学习笔记java反射机制

Global site tag (gtag.js) - Google Analytics