java中的反射

来源:互联网 发布:java对称加密算法 编辑:程序博客网 时间:2024/06/16 15:25
反射:
在java中通过类的字节码反审出这个类中的信息,包含:类 属性 方法 构造 继承的父类, 实现的接口
在java中通过字节码反射出类中的信息,包含:类 属性 方法 构造 继承 实现
在JDK中java.lang包下与java.lang.reflect包下
一:class类
     在反射中class类代表一个类,其实就是字节码,在数据类型中称为类类型
     1.创建方式(获取类的字节码的三种方式):
           Class.forName("包名.类名");
          包名.类名.class;
          通过类的对象名.getClass();
eg:
     //第一种方式
                 Class<?> class1  =Class.forName("com.tencent.model.Person");
      //第二种方式 
                 Class<?> class2  =Person.class;
      //第三种方式
                 Class<?> class3  = new Person().getClass();

     2.常用方法
     forName(“类的完整性”)  根据类的完整性路径得到类类型
     getName()                            获取类的完整路径
     getSimpleName()                  获取类名
     getConstructors()                    获取所有的构造方法
     getConstructor()                    根据参数类型获取指定的构造方法
     getInterfaces()                       获取父接口类型
     getSuperclass()                    获取父类的类类型
 二。constructor
     在反射中Constructor类代表一个类的构造方法,可以通过类的类类型获取
     1.创建方法
     Class类对象.getConstructors()                                             获取所有的构造方法  
    Class类对象. getConstructor()                                                根据参数类型获取指定的构造方法
     2.常用方法
      getName()                              获取方法名
      getParameterTypes()          获取参数列表的类类型
     getModifiers()                         获取访问修饰符
     getExceptionTypes()               获取异常类型
     newInstance()                         创建新对象
三。Field
     在反射中field类代表一个类中的一个属性
    1.创建方式
      Class类对象.getDeclaredFields                           获取本类中的所有属性,不包含父类和父接口
      Class类对象.getDeclaredField(String name)      获取本类中的指定属性
     Class类对象.getFields()                                        //获取本类,父类,父接口中public修饰的所有属性
      Class类对象.getFields(String name)                  //获取父类,父接口中public修饰的指定属性
    2.常用方法
     getName()                    获取属性名
     getModifiers()               获取访问修饰符
     getType()                      获取属性的数据类型
     get(对象名)                    获取属性对应对象上的值
     set(对象名,value)         给对象的属性设置属性值
     setAccessible(true)               强制打开私有变量,默认是false
四:Method
     在反射中Method类代表一个类中的一个方法
     
1.创建方式
      Class类对象.getDeclaredMethods()                           获取本类中的所有的方法
      Class类对象.getDeclaredMethod()                             获取本类中的指定方法
     Class类对象.getMethods()                                           //获取本类,父类,父接口中public修饰的方法
      Class类对象.getMethod()                                           //获取本类,父类,父接口中public修饰的指定属性     
  2.常用方法
     getName()                    获取方法名
     getModifiers()                获取访问修饰符
     getParameterTypes()      获取参数列表的类类型
     getReturnType()             获取返回值类型
     getExceptionTypes()       获取异常类型
      invoke()                         执行方法
五: 注解
     1.注解的定义

@Documented                        // 表示注解文档 ,可以不写
@Target(ElementType.TYPE)          // 注解作用范围,由ElementType定义,常    用有三种:                          FIELD作用在属性上   TYPE作用在类上                                                                METHOD 作用在方法上
@Retention(RetentionPolicy.RUNTIME)// 注解的生命周期,由Retention定义,有三种:SOURCE在源码文件(.java)中有效  CLASS在字节码文件(.class)中有效
    RUNTIME代码运行时有效
public @interface Table{          //@interface 注解名
          public String value() default " "; //默认值为空串
}
    2.注解的使用
          @注解名(属性=值)
     如果属性为value,并且只写一个value属性,value属性可以省略不写,多个用逗号隔开
  3.获取注解内容
     Class 对象.getAnnotations()                         获取类上面的所有的注解
     Class 对象.getAnnotation(Class cla)             获取类上面的指定的注解
     Field对象.getAnnotation(Class cla)               获取属性上面的指定的注解  
     Field对象.getDeclaredAnnotations()             获取属性上面的所有的注解 
     Method对象.getAnnotation(Class cla)          获取方法上面的指定的注解
     Method对象.getDeclaredAnnotations()        获取方法上面的所有的 注解

原创粉丝点击