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

Java反射收藏

    博客分类:
  • Java
阅读更多
java反射学习总结
2009-08-12 21:19
创建类对象
1.Class.forName(className);/******这里的className必须是完整的包名.类名 ********/
2.className.Class
3.className.getClass
4.objectName.Class
5.对于包装类可以调用其常量属性TYPE生成对应的基本类型的类对象例如Integer.TYPE生成的是Integer所对应的基本类型int的类对象

获得构造对象
构造方法的名字同类名一样在获得构造时不需要指定名字,只需要指定参数的类型,数量就可以唯一的确定一个构造。
classObject.getConstructor(Class... parameterTypes)
也可以通过调用classObject.getConstructors()获得一个包含所有构造的一个Constructor[]数组

获得属性对象
属性Field只需要指定属性名字就可以唯一的确定一个属性。方法是:
classObject.getDeclaredField(String fieldName)
classObject.getDeclaredFields()   /*******获得一个包含所有属性的Field[]数组********/

获得方法对象
考虑到方法的重载问题,想要唯一确定一个方法,不但要指定指定方法名,同时还要指定参数的个数和参数的类型。方法是:
classObject.getMethod(methodName,Class... parameterTypes)
也可以通过调用classobject.gerMethods()获得一个包含所有方法的Method[]数组

Declared关键字表示支持私有,放弃继承,不带有该关键字的方法只支持public属性,方法等;
一般情况下getField需要Declared关键字,getMethod,getConstructor不需要

获得类对象的实例
1.classObject.newInstance()该方法通过调用类对象的默认无参构造来生成一个默认的实例
2.通过getConstructor方法获得类对象的构造方法对象,然后通过该构造对象的newInstance()方法生成实例

操作属性
对于public属性,在获得属性对象以后直接调用该对象的fieldName.set(Object obj, Object value)方法对属性进行操作赋值,其中obj是指定要设置属性的类对象的实例,value指定属性值,对于其他非public属性,属性默认是拒绝访问的需要通过field.setAccessible(true)把属性设置成可以访问,但是这样做破坏了类的封装,对程序的安全性不利,所以对属性的赋值,尤其是对private属性的赋值尽量通过调用它的set方法进行。

方法的调用
方法的调用是通过调用方法对象的methodName.invoke(Object obj,Object... args).其中的obj指定调用该方法的类对象的实例名称,args是参数值列表

构造的调用
调用构造的目的是生成类对象的实例,通过调用构造对象的newInstance(Object... initargs)方法可以生成类对象的实例initargs表示参数列表

对于命名规范的java程序一部分方法名,比如说setId(),setName()等可以通过属性名进行字符串操作得到。方法的参数名,和参数值可以通过map对象以键值对的形式作为参数传递,参数类型可以通过参数名字获得同名属性的fieldName,然后调用该属性对象的fieldName.getType()方法获得,也可以通过参数值values.getClass得到,但是对于基本类型的参数,由于加入Map对象时会被转换成对应的包装类。通过调用values.getClass方法会出现错误,所以尽量选择地一种方法。
例如:
public class Test {
   public Object getInstance(String name,Map<String,Object> map) throws Exception{
       Class c=Class.forName(name);   //获得类对象
       Object obj=c.newInstance();   //调用类对象的默认无参构造生成一个没有属性值的对象
       Set<String> set=map.keySet(); //得到map对象里的参数名字符串也就是属性名
       for(String key:set){
           String mName="set"+key.substring(0,1).toUpperCase()+key.substring(1);   //通过参数名获得对应的set方法的方法名
           Field f=c.getDeclaredField(key);       //通过参数名获得同名属性的属性对象
           Method m=c.getMethod(mName, f.getType());       //通过方法名,参数类型获得set方法名,其中getType获得同名参数的类型
           m.invoke(obj, map.get(key));       //调用该方法为类对象的实例进行赋值
       }
       return obj;
   }
   public static void main(String[] args) throws Exception{

       Map<String,Object> mapd=new HashMap<String, Object>();
       mapd.put("length", 100);
       mapd.put("width", 200);
       mapd.put("high", 300);
       Object objd=new Test().getInstance("day15.heart.com.Desk", mapd);
       System.out.println(objd);
   }
}

 

分享到:
评论

相关推荐

    Java 基础(Java-8).zip

    相关主题多线程收藏Java 数据库连接 (JDBC)Java 程序Java 字符串方法雅加达服务器页面 (JSP)ServletJava 多项选择题Java 设计模式休眠Spring 框架基础目录介绍Java 架构Java 数据类型Java 方法Java 函数式编程Java ...

    Java代码收藏.rar

    9. **反射API**:反射机制允许在运行时动态地获取类的信息并操作类的对象,是Java平台的一个强大功能,常用于框架开发和自动化测试。 10. **注解(Annotation)**:注解提供了一种元数据方式,可以用来标记代码,...

    java C++ 书籍收藏

    本文主要涉及Java和C++编程语言中的一些核心概念和API的讨论。我们将分几个主要部分进行解析。 第一部分:Java编程基础 1. 基本数据类型和类 - boolean:Java的基本数据类型之一,用于表示逻辑值true或false。 -...

    Java经典代码(绝对值得收藏)

    "Java经典代码(绝对值得收藏)"这个压缩包文件显然是一个集合了Java编程中的精华代码示例,旨在帮助开发者学习和理解Java编程的精髓。以下是一些可能涵盖的知识点: 1. **基础语法**:Java的基本数据类型、变量、...

    四年来个人收藏的java自学视频

    接着,Java SE(标准版)的学习会延伸到反射、注解、泛型等进阶主题,这些在实际开发中有着广泛的应用。同时,对于想要从事Web开发的人员,Java EE(企业版)的学习不可或缺,包括Servlet、JSP、JDBC、Spring框架、...

    一个Java 8+的LangChain实现。在(企业)Java环境中构建强大的基于LLM的应用程序.zip

    10. **反射和注解处理**:LangChain可能结合使用反射和注解处理技术,实现动态的代码生成和元编程,以提供高度定制化的语言处理能力。 通过以上这些Java 8的特性,LangChain项目旨在为企业Java环境提供一个强大、...

    java面试题库 整合完美收藏版

    这个“java面试题库 整合完美收藏版”包含了丰富的Java基础、进阶、框架以及实战相关的问题,旨在帮助应聘者全面了解并掌握Java技术栈。 一、Java基础知识点 1. Java语法:包括数据类型(如基本类型和引用类型)、...

    java经典宝典收藏总结.zip

    这份"java经典宝典收藏总结.zip"压缩包显然是一份全面的Java学习资源集合,旨在帮助学习者深入理解Java语言,掌握核心概念,并通过实例来提升实践能力。下面,我们将根据描述中的关键点,对Java的知识体系进行详细的...

    收藏20200425-223758_java_

    【标题】"收藏20200425-223758_java_" 提示我们这是一个关于Java编程语言的资源集合,可能是某个开发者在2020年4月25日22点37分58秒时整理的收藏夹。这个标题可能包含了各种Java相关的学习资料、代码示例、技术文章...

    Java API帮助文档

    Java API帮助文档是Java开发人员不可或缺的资源,它包含了Java平台标准版(Java SE)的所有公共类、接口、方法...提供的"JAVA帮助文档.CHM"和"JAVA帮助文档.chw"文件是查阅这些知识的便捷途径,值得开发者收藏和参考。

    java学习的全部收藏资料

    4. **高级特性**: 包括泛型、反射、注解、枚举、并发编程等,这些都是Java中较为复杂但非常实用的特性。 5. **框架与工具**: 掌握Spring、Hibernate、MyBatis等流行的Java开发框架,以及Maven、Gradle等构建工具,...

    eclipse_failed_to_create_the_java_virtual_machine_问题图文解析_收藏

    PermSize 和 MaxPermSize 指明虚拟机为 Java 永久生成对象(Permanate generation)等这些可反射(reflective)对象分配内存限制,这些内存不包括在 Heap(堆内存)区之中。 -Xms128m 表示 JVM Heap(堆内存)最小...

    java开发者文档

    它详细列举了Java平台的核心类库,包括集合、多线程、网络编程、I/O流、反射、异常处理、XML处理等。通过阅读这份文档,开发者可以深入理解Java语言的特性和使用方法,提高代码质量和效率。 3. **J2EE 1.5 API**: ...

    Java基础知识总结 - 超详细篇收藏.zip

    10. **反射机制**:Java反射API允许程序在运行时动态地获取类的信息(如类名、方法名)并进行操作,是实现元编程的重要手段。 11. **注解(Annotation)**:注解为编译器和开发工具提供元数据,可以用于代码的编译...

    JAVA 范例开发大全 源代码

    《JAVA 范例开发大全 源代码》是一本为Java开发者提供的宝贵资源,它包含了近1000个可运行的Java类,涵盖了Java编程...总之,《JAVA 范例开发大全 源代码》是一份宝贵的Java学习资源,值得每一个Java开发者收藏和学习。

    java8集合源码-java-utils:javautils,用于文件,反射其他utils代码

    反射 细绳 用模板覆盖文件中的占位符(覆盖一些变量) java-utils 的 Maven 依赖 &lt; dependency &gt; &lt; groupId &gt;pl.jalokim.utils&lt;/ groupId &gt; &lt; artifactId &gt;java-utils&lt;/ artifactId &gt; &lt; version &gt;...

    最全Java注解图文超详解(建议收藏)

    Java注解,也被称为元数据,是Java编程语言中的一个重要特性,它允许程序员在源代码中插入信息,这些信息可以被编译器或运行时环境用于处理代码。注解为开发者提供了一种灵活的方式来标记代码,以实现代码的自解释性...

    精品资料(2021-2022年收藏)信息工程系Java专业实习报告..doc

    5. **反射机制**:Java反射机制允许程序在运行时动态地获取类的信息(如类名、属性、方法等)并调用。这对于动态加载类、创建对象、访问私有成员等具有重要意义。 6. **项目实践**:通过实际项目如SMS超市管理系统...

    《Java 与模式》作者阎宏博士(PDF).rar

    此外,阎宏博士还讲解了如何将设计模式与Java的多线程、反射、接口等核心特性相结合,使读者能够更好地理解和运用这些概念。 在阅读《Java 与模式》的过程中,读者将学习到如何通过合理的设计模式来优化类和对象的...

    最全Java注解图文超详解(建议收藏).pdf

    4. **反射支持**:通过反射,程序可以在运行时检查和处理注解,以实现动态行为。 Java注解的分类: 1. **Java标准注解**:如 `@Override`、`@Deprecated` 和 `@SuppressWarnings`。`@Override` 用于标记重写父类...

Global site tag (gtag.js) - Google Analytics