欢迎光临散文网 会员登陆 & 注册

后端 | Java | 反射

2023-06-23 12:04 作者:朵宝特工007  | 我要投稿

笔记来源:Java入门基础视频教程,java零基础自学就选黑马程序员Java入门教程

一、反射(Reflection)

  • 反射:加载类,并允许以编程的方式解剖类中的各种成分(成员变量、方法、构造器等)。

  • 获取类:Class对象

    • Class c1 = 类名.class;

    • 调用Class提供的方法:public static Class forName(String package);

    • Object提供的方法:public Class getClass(); Class c3 = 对象.getClass();

  • 获取类的构造器:Constructor对象

    • Constructor<?>[] getConstructors():获取全部构造器(只能获取public修饰的)。

    • Constructor<?>[] getDeclaredConstructors():获取全部构造器(只要存在就能拿到)。

    • Constructor<T> getConstructor(Class<?>... parameterTypes):获取某个构造器(只能获取public修饰的)。

    • Consructor<T> getDeclaredConstructor(Class<?>... parameterType):获取某个构造器(只要存在就能拿到)。

    • 方法:

      • T newInstance(Object... initargs):调用此构造器对象表示的构造器,并传入参数,完成对象的初始化并返回。

      • public void setAccessible(boolean flag):设置为true,表示禁止检查访问控制(暴力反射)。

  • 获取类的成员变量:Field对象

    • public Field[] getFields():获取类的全部成员变量(只能获取public修饰的)。

    • public Field[] getDeclaredFields():获取类的全部成员变量(只要存在就能拿到)。

    • public Field getField(String name):获取类的某个成员变量(只能获取public修饰的)。

    • public Field getDeclaredField(String name):获取类的某个成员变量(只要存在就能拿到)。

    • 方法:

      • void set(Object obj, Object value):赋值。

      • Object get(Object obj):取值。

      • public void setAccessible(boolean flag):设置为true,表示禁止检查访问控制(暴力反射)。

  • 获取类的成员方法:Method对象

    • Method[] getMethods():获取类的全部成员方法(只能获取public修饰的)。

    • Method[] getDeclaredMethods():获取类的全部成员方法(只要存在就能拿到)。

    • Method getMethod(String name, Class<?>... parameterTypes):获取类的某个成员方法(只能获取public修饰的)。

    • Method getDeclaredMethod(String name, Class<?>... parameterTypes):获取类的某个成员方法(只要存在就能拿到)。

    • 方法:

      • public Object invoke(Object obj, Object... args):触发某个对象的方法执行。

      • public void setAccessible(boolean flag):设置为true,表示禁止检查访问控制(暴力反射)。


二、反射的作用、应用场景

  • 基本作用:可以得到一个类的全部成分然后操作。

  • 可以破坏封装性。

  • 最重要的作用:适合做Java的框架,基本上,主流的框架都会基于反射设计出一些通用的功能。


后端 | Java | 反射的评论 (共 条)

分享到微博请遵守国家法律