在java中反射是指在运行期动态的获取类型的信息,比如接口的信息,类的方法和成员变量。反射的入口是Class类下面我们来一起了解一下这个Class类。

在java中每个已加载的类都有一个类信息,每个对象都一个指向它所属类信息的引用,其中类信息对应的类就是Class类(java.lang.Class)。在Object类中有一个泛型方法:getClass()方法可以获取对象的Class对象。但是获取Class对象的方法并不是只能通过对应的对象获取,可以直接使用类名.class的方法获取Class对象并且这种获取手段同样适用于接口和基本数据类型。Class还有一个静态方法forName(类名)根据类名直接加载Class获取Class对象。对于同一个类,使用这三种方式获取的Class对象是相同的。

1.名称信息

通过Class对象我们可以获取java类的很多的信息。我们可以通过Class对象获取java类的名称信息。其中常见的几个方法为:getName()、getSimpleName()、getPackage()其中getName()返回的是Java类的全限定名,getSimpleName()获取的是java的类名(不含包名),getPackage()返回的是java的包名。

2.字段信息

在类中定义的静态变量和实例变量都统称叫做字段,使用类Field表示。使用Class对象可以获取java类中的字段对象,在Class中提拱了方法:getFields()、getDeclareFields()、getFiled(String name)、getDeclareField(String name)来获取Filed对象,其中getFileds()表示返回所有的public字段包括父类的,getDeclareFields()表示返回本类中声明的字段,不包含父类中声明的字段,getField(String name)表示获取父类或子类中声明的public的字段,getDeclareField(String name)表示获取在本类中声明的字段包含非public的字段。

Field对象中也定义了许多的方法来获取字段的信息。其中有:getName(),isAccessible(),setAccessible(boolean flag),get(Object obj),set(Object obj,Object value)。其中getName()方法表示获取字段的名称,isAccessible()方法是用来判断当前的程序是否有访问当前字段的权限,setAccessible(boolean flag)当把flag的值设置为true时表示忽略java的安全检查机制,允许访问非public的字段,get(Object obj)表示获取指定对象的该字段的值,set(Object obj,Object value)表示设置指定对象的该字段的值,这里需要注意如果是静态变量那么参数obj就可以传null。

3.方法信息

类中定义的静态方法和实例方法都可以用类Method表示,在Class中提供了getMethods()、getDeclaredMethods()、getMethod(String name,Class<?> ...parameterTypes)和getDeclaredMethod(String name,Class<?> ...parameterTypes)来获取method的对象,他们方法的名字和filed命名比较的相似,含义也是大同小异。这里需要说一下的是参数paramterType表示的调用方法需要传递的参数。

在获取Method对象后这个Method对象也有一下方法:getName()、setAccessible(boolean flag)、invoke(Object obj,Object ... args)。这里我只介绍最后的这个方法invoke,这个方法需要俩个参数,其中obj为指定的对象,args为传递的参数列表,当方法是静态方法是obj传null即可。

转载于:https://www.cnblogs.com/suyang-java/p/10805030.html

java中的反射(一)相关推荐

  1. 浅说Java中的反射机制(一)

    在学习传智播客李勇老师的JDBC系列时,会出现反射的概念,由于又是第一次见,不免感到陌生.所以再次在博客园找到一篇文章,先记录如下: 引用自java中的反射机制,作者bingoideas.(()为我手 ...

  2. Java 中使用反射来创建对象、调用方法

    Java 中使用反射来创建对象.调用方法 反射创建对象 反射调用方法 反射调用私有方法 反射调用可变参私有方法 反射调用的方法自身可以抛出异常的情形   假设已有下面的类: import java.l ...

  3. java代码安全检测机制_全面解析:java中的反射机制,内含代码验证解析

    什么是反射? 在运行状态中,对于任意一个类,都能够获取到这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法和属性(包括私有的方法和属性),这种动态获取的信息以及动态调用对象的方法的功 ...

  4. 深入理解Java中的反射技术

    Java中的反射机制是指在运行状态中,对于任意一个类都能够知道这个类所有的属性和方法:并且对于任意一个对象,都能够调用它的任意一个方法:这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射 ...

  5. formdata 接受参数中带有class 对象_浅析JAVA中的反射机制及对Servlet的优化

    今天来聊聊java中的反射机制,工作以后发现很多东西动不动就要使用反射或者动态代理,如果不能很好的理解反射,那么对于动态代理等一些重要的设计模式就会有种不够通透的感觉. 所谓的反射,就是在运行状态中, ...

  6. java中的反射机制是什么

    给大家介绍一下java中的反射机制,java中反射机制更体现出了java的灵活性.多态.和类之间的耦合性. 1:反射是一种间接操作目标对象的机制,只要给定类的名字,就可以通过反设机制获取所有的类信息. ...

  7. Java中的反射和枚举

    假设现在上面的数据是以二次探测的方式来进行存放的,现在让你求: 现在找1:直接就能找到----->次数是1 现在找4:直接就可以找到---->次数是1 现在找14:先得到4的下标,发现不是 ...

  8. Java中的反射机制详讲

    Java中的反射机制详讲 1.反射机制_介绍_Class对象获取 2.反射机制_动态操作_构造器_方法_属性 3.动态编译_DanamicCompile_反射调用main方法问题 好文推荐:排序.查找 ...

  9. Java中的反射如何理解——精简

    目录 引言 反射概念 反射获取类对象 反射获取构造器对象 获取构造器对象并使用 反射获取成员变量对象 反射获取方法对象 反射获取成员方法并使用 引言 经过前面的学习,相信大家已经能够对网络编程有了一定 ...

  10. 什么是java中的反射?反射的一些常用方法

    一.什么是java中的反射 Java 反射,就是在运行状态中. 获取任意类的名称.package信息.所有属性.方法.注解.类型.类加载器等 获取任意对象的属性,并且能改变对象的属性 调用任意对象的方 ...

最新文章

  1. 【其他】将幕布文章OPML转换为Markdown的方法
  2. 第7件事 产品的5个要素
  3. 题目1526:朋友圈
  4. 获取计算机软件列表,获取计算机已安装软件列表解决方法
  5. CoffeeScript和Sass提高Web开发效率
  6. 通过100个单词掌握英语语法(十八)did
  7. 查看函数库.a函数符号信息
  8. ie6、ie7下overflow失效
  9. [原]无法删除openstack nova的image instance
  10. 记一次复杂的正则匹配——匹配但不包含
  11. c语言 文学研究助手 源程序,数据结构文学研究助手
  12. Google Code 中使用svn工具说明
  13. modelica练习
  14. 百词斩不复习_不背单词好用还是百词斩好用?
  15. 阿拉伯数字小写金额转换成中文大写金额C程序说明
  16. 霍学文:大数据重塑未来金融监管方式
  17. java 读取hdfs上的文件内容
  18. 【通俗易懂】什么是机器学习
  19. VS2019 KEY
  20. FreeBSD服务器的安装与优化(3)

热门文章

  1. Docker的使用初探(二):Docker与.NET Core的结合
  2. html onclick的方法里用js的变量
  3. 存储过程学习笔记(SQL数据库
  4. Longest Substring Without Repeating Characters(最长不重复子序列求解)
  5. ios 缺少合规证明
  6. 四种launchMode
  7. struts2 18拦截器详解(五)
  8. SharePoint 【架构系列】-- SharePoint的处理(Process)与执行模型(Trust Model) 01
  9. 系统集成项目管理工程师考试准备
  10. Spring 2.5架构图