`
libran
  • 浏览: 193271 次
  • 性别: Icon_minigender_1
  • 来自: 天津
文章分类
社区版块
存档分类
最新评论

实例讲解java的反射

阅读更多
实例讲解java的反射
        java的反射在java中是一项很有用的功能,hibernate和spring中都使用了该功能。为了方便大家理解java的反射,下面我写了一个简单的例子,希望对大家的学习有所帮助!
实现反射的类主要包括以下几个:
1、Class 表示一个类的类
2、Field 表示属性的类
3、Method 表示方法的类
4、Constrctor 表示类的构造方法的类
Class类位于java.lang包中,后面三个类都位于java.lang.reflect包中。
下面请看例子,注释在程序中:
/**

 * @description 这是java反射的演示示例,本程序完成的功能是复制一个简单的bean对象。假定bean对象的每个属性都有getXxx()和setXxx()方法。

 * @author fangjian 2008.06.11

 */



import java.lang.reflect.*;



public class ReflecTester {

	public Object copy(Object object) throws Exception

	{

		//Class类是java反射中的核心类,有几个常用方法:

		//1、getName() 以String形式返回类的名称

		//2、getFields()返回所有public类型的属性 

		//3、getField(String name)返回指定名称的属性对象 

		//4、getDeclaredFields() 以数组形式返回类的所有属性对象

		//5、getMethod(String name, Class[] parameterTypes) 返回指定的方法对象,name表示方法名称,parameterTypes表示参数类型

		//6、getConstructors()获得默认的构造方法

		//7、getConstructor(Class[] parameterTypes)获得特定的构造方法,parameterTypes为构造方法的参数类型

		

		//获得传入的对象的类型(getClass()方法用于获得对象的类型,它是在Object类中定义的,因此任何对象都可以调用)

		Class classType=object.getClass();

		System.out.println(classType.getName());

		

		//根据传入对象的类型,构造一个新的对象

		Object objectCopy=classType.newInstance();

		

		//取得传入的对象的所有属性,本例包括name和age

		Field fields[]=classType.getDeclaredFields();

		

		//遍历每个属性

		for(int i=0;i<fields.length;i++)

		{

			//取得一个属性对象

			Field field=fields[i];

			//取得属性的名字,例如:name

			String fieldName=field.getName();

			//取得属性名称的第一个字母,然后转换成大写,例如:N

			String firstChar=fieldName.substring(0, 1).toUpperCase();

			//构造一个get方法名,例如:getName

			String getMethodName="get"+firstChar+fieldName.substring(1);

			//构造一个set方法名,例如:setName

			String setMethodName="set"+firstChar+fieldName.substring(1);

			

			//根据方法的名字,取得Method对象,下面两行语句分别取得了get和set方法对象

			Method getMothod=classType.getMethod(getMethodName, new Class[]{});

			Method setMothod=classType.getMethod(setMethodName, new Class[]{field.getType()});

			

			//Method对象的invoke方法,用于动态的执行指定对象的方法。它的第一个参数表示拥有该方法的对象,第二个

			//参数表示该方法的参数

			

			//根据传入的对象及其相应的方法对象,就可以调用get方法对象取得相应的属性值了,例如:zhaona

			Object value=getMothod.invoke(object, new Object[]{});

			//根据新构造的对象,调用set方法对象,就可以为其设置相应的属性值了,例如:zhaona

			setMothod.invoke(objectCopy, new Object[]{value});			

		}

		return objectCopy;

	}

	

	public static void main(String[] args) 

	{

		//新建一个bean类,并设置值

		TestBean tb=new TestBean();

		tb.setName("zhaona");

		tb.setAge(26);

		

		//实例化当前类

		ReflecTester rt=new ReflecTester();

		try {

			//执行copy方法,将新建的bean类传入

			TestBean tbCopy=(TestBean)rt.copy(tb);

			//测试返回的类的各个属性是否与原类一致

			System.out.print(tbCopy.getName()+"-----"+tbCopy.getAge());

		} catch (Exception e) {

			e.printStackTrace();

		}

		

	}

}

//测试使用的类

class TestBean{

	String name;

	int age;

	public int getAge() {

		return age;

	}

	public String getName() {

		return name;

	}

	public void setAge(int age) {

		this.age = age;

	}

	public void setName(String name) {

		this.name = name;

	}

}
分享到:
评论

相关推荐

    实例讲解Java基础之反射

    Java反射是Java编程语言中的一个重要特性,它允许运行时的Java程序访问并操作类、接口、字段和方法等对象,即使这些对象在编译时并未被明确引用。反射提供了动态类型的能力,使得代码可以在运行时检查类的信息,创建...

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

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

    JAVA反射详细讲解

    Java反射详解 在Java编程语言中,反射是一个强大的工具,它允许程序在运行时检查类、接口、字段和方法的信息,甚至能够在运行时创建和访问这些对象。这种能力使得Java成为一种动态语言,增强了代码的灵活性和可扩展...

    java 反射ppt 和 code 示例

    通过这份资料,开发者不仅可以理解Java反射的基本概念,还能通过实例学习到反射在实际项目中的应用技巧,提升编程的灵活性和可扩展性。同时,对反射的深入理解和正确使用,也能帮助解决很多设计模式和框架中的核心...

    java反射机制讲解

    Java反射机制是Java语言提供的一种强大的能力,它允许我们在运行时检查类的信息并动态地创建和操作对象。这种机制使得程序具有更高的灵活性和扩展性,尤其是在框架开发中有着广泛的应用。 首先,我们要理解反射的...

    实例讲解Java泛型编程的快速入门

    - 泛型类实例化:创建泛型类的实例时,需要指定类型参数的实际类型,如`TestGen, Integer&gt; t = new TestGen, Integer&gt;();` 2. **泛型通配符** - 无界通配符:`?`表示任何类型,但无法在方法内部进行添加操作,...

    Reflection_in_Java.zip_in_java 反射_java 反射机制_java反射_反射机制

    侯捷先生是一位著名的Java技术专家,他的"流星絮语"系列教程深入浅出地讲解了Java反射机制。通过他的学习笔记,我们可以更深入地理解如何在实际项目中应用反射,解决一些特定问题,如插件化开发、序列化、动态代理等...

    实例讲解Java设计模式编程中如何运用代理模式共3页.pd

    本实例将详细讲解如何在Java编程中运用代理模式。 代理模式的核心思想是为一个对象创建一个代理对象,这个代理对象在客户端和目标对象之间起到中介的作用,可以控制对目标对象的访问,或者在调用目标对象的同时增加...

    Javafanshe.rar_java 反射_java反射_反射_反射机制

    《Java反射.txt》可能是对这些概念的详细讲解,而《www.pudn.com.txt》可能是来源于某个在线技术社区的讨论或教程,提供了额外的见解和实践应用。学习并理解这些内容,将有助于深入掌握Java的反射机制,提升编程灵活...

    具体的例子讲解java

    一份完整的Java复习笔记通常会涵盖以上所有主题,并可能包含更多细节,如集合框架(ArrayList、LinkedList、HashMap等)、IO流、线程同步、反射、泛型、注解、枚举、Lambda表达式等内容。此外,笔记可能还会涉及...

    java反射技术讲解

    Java反射机制是Java语言提供的一种强大的工具,它允许程序在运行时动态地获取类的信息以及调用对象的方法。这一机制使得Java代码具有高度的灵活性和可扩展性,尤其是在处理不确定类型的对象或者需要进行动态绑定时。...

    java反射之Constructor

    下面将详细讲解 Constructor 类的概述、获取构造函数的方式、构造类的实例概述等。 Constructor 概述 ------------- Constructor 类提供了关于类的单个构造方法的信息,包括构造函数的名称、参数类型、访问权限等...

    accp xml java反射 PPT

    该教材通过PPT的形式深入浅出地讲解了XML、Java反射等主题,旨在提升学员在实际项目开发中的能力。 【XML】XML,全称为Extensible Markup Language,可扩展标记语言,是一种用于存储和传输数据的标准格式。它具有自...

    Java反射_Spring IOC

    Java反射和Spring IOC是Java开发中的两个重要概念,它们在构建灵活、可扩展的应用程序时起着关键作用。本文将深入探讨这两个主题,并提供相关的学习资源。 首先,让我们了解一下Java反射。Java反射机制是Java语言的...

    java简单实例程序源代码

    "java简单实例程序源代码"这个压缩包包含了一系列章节相关的Java实例源代码,适合初学者和有经验的开发者用来加深对Java语言的理解。以下是这些章节可能涉及的重要知识点的详细解释: 1. **CH11**: 这个章节可能...

    100个实例的Java源程序

    10. **反射**:Java的反射机制允许在运行时动态地获取类的信息并操作类的对象。实例可能涉及Class类、Constructor类、Method类的使用。 11. **枚举**:Java枚举类型是一种特殊的类,用于定义有限数量的常量。实例会...

    java反射model

    这个“java反射model”可能包含一系列关于如何在Java中使用反射的示例和讲解。 反射机制主要涉及以下核心类: 1. `Class` 类:每个类在运行时都有一个与之对应的`Class`对象,它包含了该类的所有信息,如类名、...

    jxl导出excel文件的例子,用了java反射

    关于描述中提到的"用了java反射",在Java反射机制下,我们可以动态地获取类的信息(如字段、方法等)并在运行时创建或操作对象。在导出Excel时,如果数据来源于数据库或Java对象,反射可以帮助我们动态地获取对象的...

Global site tag (gtag.js) - Google Analytics