`

java反射机制中的getDeclaredField()

阅读更多

        反射机制:所谓的反射机制就是java语言在运行时拥有一项自观的能力。通过这种能力可以彻底的了解自身的情况为下一步的动作做准备。 

        如下为getDeclaredField()的一个实例:

package com.bijian.test;

import java.lang.reflect.Field;
import java.util.Date;

public class Program {

	public Program() {
	}

	public Program(String str, Date date, int i) {
		this.str = str;
		this.date = date;
		this.i = i;
	}

	private String str = "Hello";
	private Date date = new Date();
	protected int i = 0;

	public int getI() {
		return i;
	}

	public String getStr() {
		return str;
	}

	public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException {

		try {
			Program program = new Program();
			Class progClass = program.getClass();
			
			//在对象是未知的情况下,通过如下方法得到这个对象的所有属性值
			java.lang.reflect.Field[] fields = progClass.getDeclaredFields();
			for (java.lang.reflect.Field f : fields) {
				System.out.println(f.getName());
			}

			// 通过反射机制,获取到类Program中的str
			Field strField1 = progClass.getDeclaredField("str");
			// 输出private java.lang.String Program.str
			System.out.println("Field found: " + strField1.toString());

			// 同上
			Field dateField = progClass.getDeclaredField("date");
			System.out.println("Field found: " + dateField.toString());
			// 同上
			Field iField = progClass.getDeclaredField("i");
			System.out.println("Field found: " + iField.toString());

			// 我想说的是这一点,这里能获取到类Program中的str并对其修改。
			// Program类中没有对str设置的setStr()方法,而且使用了private,
			// 这是不允许访问的。
			// 但是我们能通过反射机制,从而获取private类型的值,并直接改。
			Field strField = progClass.getDeclaredField("str");
			strField.set(program, "我是Str字符串。");
			// 输出:我是Str字符串。
			System.out.println(program.getStr());

		} catch (NoSuchFieldException ex) {
			System.out.println(ex.toString());
		}
	}
}

运行结果:

str
date
i
Field found: private java.lang.String com.bijian.test.Program.str
Field found: private java.util.Date com.bijian.test.Program.date
Field found: protected int com.bijian.test.Program.i
我是Str字符串。

 

文章来源:http://my.oschina.net/swords/blog/117357

分享到:
评论

相关推荐

    java面试题--反射机制

    `Class`类在Java反射机制中扮演着核心角色,它是所有Java类的运行时表示。`Class`对象可以由以下几种方式获取: 1. **通过类的`Class`属性获取**:如`String.class`。 2. **通过对象的`getClass()`方法获取**:如`...

    Java反射机制的实现_Reflection

    Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、对象等的内部信息。通过Java反射机制,开发者可以在不知道具体类名的情况下创建对象,调用方法,访问和修改私有成员变量,以及...

    Java反射机制笔记(简单易懂)

    Java反射机制是Java语言中一个强大的功能,它允许程序在运行时检查和修改其自身的结构和行为。通过Java反射机制,我们可以在运行时获取类的信息,包括类的成员变量、方法、构造方法等,并可以动态地调用这些成员变量...

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

    Java反射机制是Java编程语言中的一个重要特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射机制的核心类集中在java.lang.reflect包下,包括Class、Constructor、Method和...

    北大青鸟java反射机制

    Java反射机制是Java编程语言中的一个强大工具,它允许程序在运行时检查并操作类、接口、字段和方法等对象。在"北大青鸟java反射机制"的学习资料中,我们将会深入探讨这一核心特性。 首先,我们要理解反射的核心概念...

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

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

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

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

    java反射机制详解

    ### Java反射机制详解 #### 一、反射机制是什么 反射机制是Java编程语言的一个核心特性,它允许程序在运行时动态地获取类的信息,并且能够动态地创建对象和调用对象的方法。简单来说,反射机制使得Java程序可以...

    实战java反射机制-让你迅速认识java强大的反射机制

    Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、字段和方法的信息,甚至动态地创建对象并调用其方法。通过反射,开发者可以实现高度灵活和动态的代码,这对于框架开发、元编程...

    JAVA 反射机制应用

    Java反射机制是Java语言提供的一种强大功能,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射机制的核心类是java.lang.Class,它代表了运行时的类信息。通过Class对象,我们...

    Java反射机制源码

    Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、对象等的内部结构。通过反射,开发者可以动态地创建对象、调用方法、访问字段,甚至修改私有成员,这为实现元编程和框架设计...

    java反射机制

    Java反射机制是Java编程语言中的一个强大工具,它允许程序在运行时检查和操作类、接口、对象等的内部结构。通过反射,开发者能够在运行时动态地获取类的信息(如类名、方法名、参数类型)并调用方法,创建对象,甚至...

    java反射机制PPT

    总结起来,Java反射机制是Java编程中一种重要的能力,它使得代码更加灵活,能应对许多动态变化的需求。然而,使用反射也需要谨慎,因为它可能带来性能损失和安全问题。动态代理则是利用反射实现的一种设计模式,常...

    Java反射机制(推荐)

    Java反射机制是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。这种能力使得Java开发者能够在运行时动态地获取类的信息(如类名、方法名、参数类型等)并调用...

    Java反射机制的详细讲解及实例,有助于java深度开发

    Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、字段和方法等对象。这一机制对于理解和利用Java的动态性至关重要,尤其是在进行复杂系统设计、框架开发以及元数据驱动的应用中...

    java反射机制原理

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

    java的反射机制及其实际应用

    ### Java的反射机制及其实际应用 #### 一、引言 ...总之,Java反射机制是一项强大的工具,它能够在运行时动态地获取和操作类的信息。然而,应该谨慎使用反射,避免滥用造成不必要的性能损失或安全风险。

    Java反射机制

    Java反射机制是Java编程语言中的一个强大工具,它允许程序在运行时检查和操作类、接口、对象等的内部信息。通过反射,开发者可以动态地创建对象、调用方法、访问字段,甚至修改私有成员,这在实现元编程、插件系统、...

    java反射机制详解与应用

    总的来说,Java反射机制是Java编程中不可或缺的一部分,它为程序提供了强大的动态性,但也需要开发者在使用时平衡效率和安全性。通过理解和掌握反射,开发者可以更好地利用Java平台的潜力,实现更加灵活和强大的软件...

    java反射机制文档

    Java反射机制是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。这种能力使得Java代码能够在运行时动态地获取类的信息(如类名、方法名、参数类型等)并调用...

Global site tag (gtag.js) - Google Analytics