美文网首页
java反射机制

java反射机制

作者: 好一个坏小孩 | 来源:发表于2019-04-18 20:19 被阅读0次

    定义

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

    用途

    在日常的第三方应用开发过程中,经常会遇到某个类的某个成员变量、方法、构造方法是私有的或是只对系统内开放,这时就可以利用java的反射机制通过反射来获取所需的私有方法和属性;但是也不是所有的的都适合反射,对于没有权限的应用返回值是没有任何意义的缺省值;

    反射机制的相关类

    • class类:代表类的实体,在运行的java应用程序中表示类和接口;
    • field类:代表类的成员变量(成员变量也称为类的属性)
    • method类:代表类的方法;
    • constructor类:代表类的构造方法;

    class类

    获得类相关的方法

    • asSubclass(Class<U> clazz)把传递的类的对象转换成代表其子类的对象;
    • cast 把对象转换成代表类或是接口的对象;
    • getClassLoader() 获得类的加载器;
    • getClasses() 返回一个数组,数组中包含该类中所有公共类和接口类的对象;
    • getDeclaredClasses() 返回一个数组,数组中包含该类中的所有类和接口类的对象;
    • forName(String className) 根据类名返回类的对象;
    • getName() 获得类的完整路径名字;
    • newInstance() 创建类的实例;
    • getPackage()获得类的包;
    • getSimpleName() 获得类的名字;
    • getSuperclass() 获得当前类继承的父类的名字;
    • getInterfaces() 获得当前类实现的类或是接口;

    获得类中属性相关的方法

    • getField(String name) 获得某个共有的属性对象;
    • getFields() 获得所有共有的属性对象;
    • getDeclaredField(String name) 获得某个属性对象;
    • getDeclaredFields() 获得所有属性对象;

    获得类中注解相关的方法;

    • getAnnotation(Class<U> annotationClass) 返回该类中与参数类型相匹配的共有注解对象;
    • getAnnotations() 返回该类中所有的共有注解对象;
    • getDeclaredAnnotation(Class<U> annotationClass) 返回该类中于参数类型匹配的注解对象;
    • getDeclaredAnnotations() 返回该类中所有的注解对象;

    获得类中构造器相关的方法;

    • getConstructor(Class..<?> parameterTypes)获得该类中与参数类型匹配的共有构造方法;
    • getConstructors() 获得该类的所有共有构造方法;
    • getDeclaredContructor(Class..<?> parameterTypes) 获得该类中与参数类型匹配的构造方法;
    • getDeclaredConstructor()获得该类中所有构造方法;

    获得类中方法的相关方法;

    • getMethod(String name,Class..<U> parameterTypes) 获得该类中的某个共有方法;
    • getMethods() 获得该类中的所有共用方法;
    • getDeclaredMethod(String name,Class..<U> parameterTypes) 获得该类中的某个方法;
    • getDeclaredMethods() 获得该类中的所有方法;

    类中其他的重要方法;

    • isAnnotation()如果是注解类型则返回true;
    • isAnnotationPresent(Class<? extends Annotation> annotationClass)如果是指定类型的注解则返回true;
    • isAnonymousClass() 如果是匿名内部类则返回true;
    • isArray() 如果是一个数组类型则放回true;
    • isEnum()如果是枚举类型则返回true;
    • isInstance(Object obj)如果是obj是当前类的实例则返回true;
    • isInterface()如果当前类是接口类型则返回true;
    • isLocalClass()如果是局部类则返回true;
    • isMemberClass() 如果是内部类则返回true;

    filed类

    • equals(Object obj)属性和obj相等则返回true;
    • get(Object obj)获取obj中对应的属性值;
    • set(Object obj,Object value)设置obj中对应属性的值

    Method 类

    • invoke(Object obj,Object... args)传递object对象及参数调用该对象的方法;

    constructor类

    • newInstance(Object initargs) 根据传递的参数创建类的对象;

    相关文章

      网友评论

          本文标题:java反射机制

          本文链接:https://www.haomeiwen.com/subject/evqjuqtx.html