`

java反射的实例

阅读更多
package com.juziku;

/**
 * 反射类
 * @author sunlightcs
 * 2011-3-5
 * http://hi.juziku.com/sunlightcs/
 */
public class ReflectPoint {
	/**
	 * 私有变量x
	 */
	private int x;
	
	public int y;
	public String str1 = "abc";
	public String str2 = "123";
	
	public ReflectPoint(int x, int y) {
		super();
		this.x = x;
		this.y = y;
	}
	
}

package com.juziku;

import java.lang.reflect.Field;

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

	public static void main(String[] args) throws Exception{
		
		ReflectPoint reflectPoint = new ReflectPoint(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);

	}

	private static void getStringValues(Object obj) throws Exception{
		/**
		 * 获得所有属性的位置
		 */
		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);
			}
		}
	}

	private static void onchageValue(Object obj) throws Exception{
		Field field = obj.getClass().getField("str1");
		System.out.println(field.get(obj));
		field.set(obj, "22");
		System.out.println(field.get(obj));
	}

}
分享到:
评论

相关推荐

    java反射实例代码

    在提供的"java反射实例代码"中,应该包含了如何使用上述方法的实际示例,这些示例有助于加深对Java反射机制的理解。通过阅读和运行这些代码,开发者可以更直观地学习如何在程序运行时动态地操作类、方法和字段,从而...

    java 反射实例,大量注释,简单易懂

    Java反射是Java编程语言中的一个重要特性,它允许程序在运行时检查类、接口、字段和方法的信息,并且能够在运行时创建和访问这些类的对象。在Java中,反射提供了对类对象的元数据(metadata)的访问,使得我们可以...

    Java反射实例源码

    标题"Java反射实例源码"表明我们将探讨如何通过源代码来实现和理解Java反射。这个实例可能包含了如何动态地创建对象、调用方法、访问字段和执行构造器的示例。 描述中提到的博客文章"菜鸟学编程(九)——Java反射...

    java反射实例.

    在标题和描述中提到的"java反射实例"是一个简单的入门程序,旨在演示如何使用反射来操作JavaBean的get和set方法。 首先,让我们理解JavaBean。JavaBean是一种符合特定规范的Java类,通常具有公有的getter和setter...

    java反射实例

    在标题“Java反射实例”中,我们聚焦于如何在实际编程中应用这一特性。通过反射,我们可以动态地获取类的信息,如类名、方法名、字段名,甚至可以在运行时创建和调用对象。这对于实现元编程、插件系统、序列化、单元...

    Java反射实例

    以下是对"Java反射实例"的详细解释: 1. **获取Class对象** 要使用反射,首先需要获取到对应的`Class`对象。这可以通过以下三种方式实现: - 使用`Class.forName()`方法,传入类的全名(包括包名)。 - 对象的`...

    Java 8个反射实例

    以下将详细介绍Java反射的8个关键实例。 1. 获取Class对象 要使用反射,首先需要获取到目标类的Class对象。这可以通过以下几种方式实现: - 使用`Class.forName()`方法,如`Class<?> clazz = Class.forName("全...

    java 反射 实例

    java 反射 的 实例介绍 个人笔记

    java反射实例学习

    很好的几个反射的例子,看后就明白什么是反射了,反射机制怎么用了

    Spring IOC 原理 ,Java 反射实例,自定义注解

    关于Java反射的实例,我们可以创建一个简单的例子。假设我们有一个接口`Service`和两个实现类`ServiceImpl1`、`ServiceImpl2`。在不使用反射的情况下,我们通常会通过new关键字创建服务对象。而通过反射,可以在运行...

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

    三、Java反射实例 1. 创建对象:通过`Class.newInstance()`创建默认构造器的对象,或`Constructor.newInstance()`创建指定构造器的对象。 ```java Class<?> clazz = Class.forName("com.example.MyClass"); MyClass ...

    Java反射经典实例

    本实例将深入探讨Java反射的应用及其重要性。 一、什么是Java反射 Java反射机制允许我们动态地获取类的信息,并在运行时创建和调用对象的方法。这种能力使得Java具有高度的灵活性和动态性,特别是在处理跨版本兼容...

    java反射经典实例

    在本“Java反射经典实例”中,我们将深入探讨这个主题,了解如何利用反射来访问和修改私有属性以及调用私有方法。 1. **反射的概念与用途** - 反射机制是在运行时分析类的能力,它允许我们获取类的信息(如类名、...

    反射实例-JAVA反射机制

    ### 反射实例—JAVA反射机制 #### 一、反射概念及原理 反射在计算机科学领域,特别是程序设计中,是指程序有能力访问、检测和修改其自身的结构和行为。这一概念最早由Smith于1982年提出,并迅速应用于各种编程语言...

    Java反射简单小实例

    ### Java反射机制简介 Java反射机制是Java编程语言的一个强大特性,它允许程序在运行时检查自身,并且能够“看”到类的信息(字段、方法等),甚至可以在运行时调用这些方法或修改这些字段的值。这为开发带来了很大...

    JAVA反射机制的入门代码

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

    反射实例-JAVA反射机制.doc

    Java 反射机制详解 Java 反射机制是 Java 语言提供的一种强大的工具,它允许程序在运行时动态地获取类的信息(如类名、属性、方法等)并进行操作。这种能力使得 Java 应用程序更加灵活,能够在运行时发现和修改自身...

Global site tag (gtag.js) - Google Analytics