zoukankan      html  css  js  c++  java
  • java反射小记

    java中反射是指在运行期动态的获取类型的信息,比如接口的信息,类的方法和成员变量。

    获取Class对象有3种方式

    1.getClass()方法 

    2.类名.class   //这种获取手段同样适用于接口和基本数据类型。

    3.forName(全类名)   //静态方法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即可。

  • 相关阅读:
    Windows Azure Web Site (19) Azure Web App链接到VSTS
    Windows Azure Virtual Machine (35) Azure VM通过Linked DB,执行SQL Job
    Azure PowerShell (16) 并行开关机Azure ARM VM
    Windows Azure Virtual Network (12) 虚拟网络之间点对点连接VNet Peering
    Azure ARM (21) Azure订阅的两种管理模式
    Windows Azure Platform Introduction (14) 申请海外的Windows Azure账户
    Azure ARM (20) 将非托管磁盘虚拟机(Unmanage Disk),迁移成托管磁盘虚拟机(Manage Disk)
    Azure ARM (19) 将传统的ASM VM迁移到ARM VM (2)
    Azure ARM (18) 将传统的ASM VM迁移到ARM VM (1)
    Azure Automation (6) 执行Azure SQL Job
  • 原文地址:https://www.cnblogs.com/zmyx2018/p/14928372.html
Copyright © 2011-2022 走看看