Java反射基础

使用反射获取类的信息

反射获取类的信息是通过Class类获取的,常用方法:

  • String getName()
    获取类的包名路径,如com.company.Person

  • String getSimpleName()
    获取类的名称,如Person

  • Field[] getFields()
    获取类所有public访问权限的变量,包括继承父类的

  • Field[] getDeclaredFields()
    获取类所有访问权限的变量,但不包括继承的

  • Method[] getMethods()
    获取类所有public的方法,包括继承的

  • Method[] getDeclaredMethods()
    获取类所有访问权限的方法,但不包括继承的

反射获取类的变量的信息是通过Field类获取的,常用方法:

  • String getName()
    获取变量的名称

  • int getModifiers()
    获取变量的访问权限

  • Class<?> getType()
    获取变量的类型

反射获取类的方法的信息是通过Method类获取的,常用方法:

  • String getName()
    获取方法名称

  • int getModifiers()
    获取方法的访问权限

  • Class<?> getReturnType()
    获取方法的返回值类型

  • Parameter[] getParameters()
    获取方法的参数列表

通过反射获取注解信息

  • Annotation[] getAnnotations()
    获取所有注解,包括继承的注解

  • Annotation[] getDeclaredAnnotations()
    获取本元素的所有注解,不包含父类继承而来的

  • <T extends Annotation> T getAnnotation(Class<T> annotationClass)
    获取指定的注解

  • <T extends Annotation> T getDeclaredAnnotation(Class<T> annotationClass)
    获取本元素的指定注解

  • boolean isAnnotationPresent(Class<? extends Annotation> annotationClass)
    判断当前元素是否被指定注解修饰

访问或操作类的私有方法

package reflect;

public class TestClass {

    private void privateMethod(String head , int tail){
        System.out.print(head + tail);
    }

}

通过反射调用TestClass的privateMethod方法

    public static void getPrivateMethod() throws Exception{
        TestClass testClass = new TestClass();
        Class mClass = testClass.getClass();

        // 获取类的方法,第一个参数是方法名称,第二、三个参数是方法的参数类型
        Method privateMethod = mClass.getDeclaredMethod("privateMethod", String.class, int.class);
        if (privateMethod == null) {
            return;
        }
        // 获取私有方法的访问权,并不是修改实际权限
        privateMethod.setAccessible(true);
        // 使用invoke调用方法,第一个参数是类的对象,后面两个参数是方法的实参
        privateMethod.invoke(testClass, "Java Reflect ", 666);
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容