`

实例解读反射机制

    博客分类:
  • java
阅读更多
package org;
/*
* java的反射在java中是一项很有用的功能,hibernate和spring中都使用了该功能。为了方便大家理解java的反射,下面我写了一个简单的例子,希望对大家的学习有所帮助!

实现反射的类主要包括以下几个:
1、Class 表示一个类的类
2、Field 表示属性的类
3、Method 表示方法的类
4、Constrctor 表示类的构造方法的类
Class类位于java.lang包中,后面三个类都位于java.lang.reflect包中。
*/
/*
* 这是java反射的演示示例,本程序完成的功能是复制一个简单的bean对象。
* 假定bean对象的每个属性都有getXxx()和setXxx()方法。
*/
/*
* 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类中定义的,因此任何对象都可以调用
*/
import java.lang.reflect.*;
public class ReflectTester {
public Object copy(Object object)throws Exception{
Class classType=object.getClass();//与Class.forName(“类名");一样
System.out.println(classType.getName());
//根据传入对象的类型构造一个新的对象
Object objectCopy=classType.newInstance();
//取得传入对象的所有属性
Field fields[]=classType.getDeclaredFields();
//遍历每个属性
for(int i=0;i<fields.length;i++){
//取得一个属性对象
Field field=fields[i];
//取得属性名
String fieldName=field.getName();
//取得属性名称的每一个字母然后转化为大写
String firstChar=fieldName.substring(0,1).toUpperCase();
//构造一个get方法名
String getMethodName="get"+firstChar+fieldName.substring(1);
//构造一个set方法名
String setMethodName="set"+firstChar+fieldName.substring(1);
//根据方法名,分别取得get和set方法
Method getMethod=classType.getMethod(getMethodName, new Class[]{});
Method setMethod=classType.getMethod(setMethodName, new Class[]{field.getType()});
//Method对象的invoke方法,用于动态的执行指定对象的方法。它的第一个参数表示拥有该方法的对象,第二个
//参数表示该方法的参数
//根据传入的对象及其相应的方法对象,就可以调用get方法对象取得相应的属性值了
Object value=getMethod.invoke(object, new Object[]{});
//据新构造的对象,调用set方法对象,就可以为其设置相应的属性值了,
setMethod.invoke(objectCopy, new Object[]{value});

}
return objectCopy;
}
     public static void main(String args[]){
    //新建一个bean类,
    TestBean tb=new TestBean();
    tb.setName("梁小江");
    tb.setAge(100);
    //实例化当前类
    ReflectTester rt=new ReflectTester();
    try{
    //执行copy方法,将新建的Bean类传入
    TestBean tbCopy=(TestBean)rt.copy(tb);
    //测试返回的类属性是否与原来一致
    System.out.println(tbCopy.getName()+"----"+tbCopy.getAge());
    }catch(Exception e){
    e.printStackTrace();
    }
   
     }
}

class TestBean{
private String name;
private int age;
public TestBean(){

}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}

}
分享到:
评论

相关推荐

    Java 反射详解

    总结,Java反射机制是Java动态性的重要体现,它使代码能够在运行时探索和改变自身的行为。通过熟练掌握反射,开发者可以构建更加灵活和强大的应用程序。然而,也应意识到其潜在的风险和性能影响,合理地在项目中运用...

    MyReflectionProject_反射的特点解读_wayq3w_源码

    4. **动态代理**:Java的动态代理机制就是基于反射实现的,可以在运行时动态创建代理类。 ### 反射创建对象 在Java中,`Class`类代表类的运行时信息,通过`Class.forName()`方法可以获取到类的`Class`对象。一旦有...

    C#运行实例100例

    下面将对这些实例涉及的知识点进行详细解读。 首先,C#作为.NET框架的基础,其语法结构严谨,支持面向对象编程。实例可能涵盖了基本的数据类型(如整型、浮点型、字符串)和控制流程(如条件语句、循环结构),这些...

    java开发实例100例之二

    8. **实例57**:可能关于反射机制。Java反射允许在运行时检查类的信息,创建并调用对象,这对于动态类型的应用和元编程非常有用。 9. **实例93**:可能涉及泛型,这是Java 5引入的一个重要特性,它增强了类型安全,...

    Java核心技术第八版 实例

    以下是对这些实例的详细解读: 1. **基础语法与控制结构**:在这一部分,你可能会遇到关于变量声明、数据类型、运算符、流程控制(如if-else,switch,for,while循环)以及方法的实例。这些例子有助于巩固Java的...

    java笔记与java核心内容解读

    9. **反射机制**:反射是Java的一个强大特性,允许程序在运行时动态地获取类的信息并调用其方法。 10. **泛型**:泛型引入了类型安全,使得在编译时就能检查类型错误,提高了代码的可读性和可维护性。 11. **JVM...

    c#200个编程实例

    13. **反射与元数据**:探索C#的反射机制,动态操作类型和成员,以及使用Attribute元数据。 14. **异步编程**:使用async/await关键字进行异步操作,提高应用程序的响应速度。 15. **委托与事件**:理解委托和事件...

    射频功放设计实例文件

    7. **报告**:设计实例可能还包括一份详细的报告,解释设计步骤、设计决策以及对最终结果的解读。 学习MW6S004的射频功放设计,不仅能够帮助我们理解如何利用ADS进行实际的电路设计,还能深入理解射频功放的物理...

    教学设计《反射是神经系统活动的基本方式》.docx

    教学流程包括导入新课的小实验、解读学习目标、探究新知等环节,通过实例引导学生主动参与,总结反射的概念,然后逐步揭示反射弧的结构和功能。 在实际教学中,教师应以实际情境为引导,以实验为载体,促进学生深度...

    Java基础与案例实例详解

    12. **反射机制**:反射允许程序在运行时检查和修改自身的行为,包括获取类信息、创建对象、调用方法等。 13. **泛型**:泛型引入了类型参数,提高了代码的类型安全性和重用性。 14. **注解(Annotation)**:注解是...

    Java 实用编程30例

    7. **实例21:反射机制** 反射允许在运行时动态地获取类的信息并调用其方法。这个实例可能会讲解Class类的使用,以及如何通过反射创建对象和调用私有方法。 8. **实例23:设计模式** 设计模式是软件开发的通用...

    JAVA实例技术手册 第二版

    在这里,读者将了解反射机制如何让程序在运行时检查或修改其行为;泛型如何使代码更加通用,减少强制类型转换;枚举的使用让代码更加清晰和简洁;注解如何提供一种元数据的形式;多线程编程解决并发问题的奥秘;以及...

    class的实例在JVM中的内部表示

    以上内容仅是对“类的实例在JVM中的内部表示”这一主题的基本解读,具体博客可能会更深入地讨论JVM内部的实现细节,例如对象头的精确结构、垃圾回收算法、类加载器的实现等。通过阅读`instanceKlass.xls`这个文件,...

    java编程200例(附:JAVA文档完全解读中文版)

    8. **反射机制**:在运行时动态获取类的信息和调用方法。 9. **泛型**:类型参数化,用于提高代码的复用性和安全性。 10. **枚举与注解**:枚举类型的使用,注解在元数据中的应用。 11. ** Lambda表达式和函数式...

    热弹性波在半导体纳米结构非局部多孔介质中的反射.pdf

    这些波的存在,为理解热弹性波在非局部多孔介质中的反射机制提供了新的视角。特别地,研究指出,在角频率低于某一截止频率时,纵向波会受到显著的衰减,而剪切波则不受到类似的影响。此外,介质空隙的存在、热效应...

    java实用编程100(1)例1-55

    10. **反射机制**:Java的反射API允许程序在运行时动态获取类的信息并操作类的对象,实例可能包含类的加载、方法的调用等。 11. **泛型**:泛型提供了一种在编译时检查类型安全的方法,实例会展示如何使用泛型类、...

    JAVA动态代理模式.pdf

    在Java中,动态代理是利用反射机制实现的,可以在运行时动态生成代理类和对象。它主要应用于需要控制对象访问、提供额外功能(如日志、权限检查等)的场景中。 在给定文件的内容中,主要涉及到两个关键部分,分别是...

Global site tag (gtag.js) - Google Analytics