zoukankan      html  css  js  c++  java
  • java中的反射(一)

        在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即可。

        

  • 相关阅读:
    如何实现清浮动(转载)
    js动态删除某一行,内容超出单元格后超出的部分用省略号代替
    jquery页面隐藏和展开之间切换
    比较jquery中的after(),append(),appendTo()方法
    如何使用git管理代码
    网页游戏常见外挂原理及防御
    JQuery实现页面刷新后菜单保留鼠标点击addclass的样式
    【查询】—Entity Framework实例详解
    SQL Server清除连接过的服务器名称列表
    WebBrowser.ExecWB的完整说明
  • 原文地址:https://www.cnblogs.com/suyang-java/p/10805030.html
Copyright © 2011-2022 走看看