反射与Class

1.反射

    概念:

        将类的各个组成部分封装为其他对象,这就是反射机制

    好处:

        1、可以在程序运行过程中,操作这些对象。
        2、可以解耦,提高程序的可扩展性。
        

    反射的特点

         动态性:反射允许程序在运行期间动态地创建对象、调用方法和修改属性。
         类型检查问题:虽然反射可以使用某个类的任何方法或属性,但是编译器在编译时并不会检查这些方法或属性是否可用。
         性能问题:反射的性能比直接调用方法要差。因为在使用反射时,需要先获取方法或变量的引用,然后再进行调用或访问。
         安全性问题:反射破坏了封装¥,可以对私有成员进行访问和修改
    

    获取Class对象的方式:

        1.使用Object类的getClass()方法
        2.使用Class类的静态方法forName(String 类的完整路径)方法
        3.使用Object类的静态成员class
        注:Obejct类是所有类的父类
        

2.Class类

     Class 没有公共构造方法。
    Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的。
    

    常用方法:

方法
含义
 static Class<?> forName(String className)
返回与带有给定字符串名的类或接口相关联的 Class 对象。
static Class<?> forName(String name, booleaninitialize, ClassLoader loader)
使用给定的类加载器,返回与带有给定字符串名的类或接口相关联的 Class 对象。
String getName()
以 String 的形式返回此 Class 对象所表示的实体(类、接口、数组类、基本类型或 void)名称。
Class getSuperclass()
获得该类的父类的Class对象
Package getPackage()
获取此类的包。

//获取构造方法Construct类

Constructor<T> getConstructor(Class<?>... parameterTypes)
返回一个 Constructor 对象,它反映此 Class 对象所表示的类的指定公共构造方法。
Constructor<?>[] getConstructors()
返回一个包含某些 Constructor 对象的数组,这些对象反映此 Class 对象所表示的类的所有公共构造方法。
Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes)
返回一个 Constructor 对象,该对象反映此 Class 对象所表示的类或接口的指定构造方法。
Constructor<?>[] getDeclaredConstructors()
返回 Constructor 对象的一个数组,这些对象反映此 Class 对象表示的类声明的所有构造方法。

//获取字段Field类

Field getField(String name)
返回一个 Field 对象,它反映此 Class 对象所表示的类或接口的指定公共成员字段。
Field[] getFields()
返回一个包含某些 Field 对象的数组,这些对象反映此 Class 对象所表示的类或接口的所有可访问公共字段。
Field geDeclaredtField(String name)
返回一个 Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段。
Field[] geDeclaredtFields()
返回 Field 对象的一个数组,这些对象反映此 Class 对象所表示的类或接口所声明的所有字段。

//获取方法Method类

Method getDeclaredMethod(String name, Class<?>... parameterTypes)
返回一个 Method 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明方法。 (包含父类方法)
Method[] getDeclaredMethods()
返回 Method 对象的一个数组,这些对象反映此 Class 对象表示的类或接口声明的所有方法, 包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。 (包含父类方法)
Method getDeclaredMethod(String name, Class<?>... parameterTypes)
返回一个 Method 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明方法。
Method[] getDeclaredMethods()
返回 Method 对象的一个数组,这些对象反映此 Class 对象表示的类或接口声明的所有方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。(不包含父类方法)
    
    

3.Packge类

     Package 对象包含有关 Java 包的实现和规范的版本信息。
    

    常用方法:

String getName()
返回此包的名称。
static Package[] getPackages()
获得调用方的 ClassLoader 实例当前已知的所有包。

4.Constructor类

     Constructor 提供关于类的单个构造方法的信息以及对它的访问权限。
    Constructor 允许在将实参与带有底层构造方法的形参的 newInstance()
    匹配时进行扩展转换,但是如果发生收缩转换,则抛出 IllegalArgumentException。
    

    常用方法:

String getName()
以字符串形式返回此构造方法的名称。
Class<?>[] getParameterTypes()
按照声明顺序返回一组 Class 对象,这些对象表示此 Constructor 对象所表示构造方法的形参类型。
int getModifiers()
以整数形式返回此 Constructor 对象所表示构造方法的 Java 语言修饰符。
T newInstance(Object... initargs)
使用此 Constructor 对象表示的构造方法来创建该构造方法的声明类的新实例,并用指定的初始化参数初始化该实例。
                
    

5.Method类

     Method 提供关于类或接口上单独某个方法(以及如何访问该方法)的信息。所反映的方法可能是类方法或实例方法(包括抽象方法)。
    Method 允许在匹配要调用的实参与底层方法的形参时进行扩展转换;但如果要进行收缩转换,则会抛出 IllegalArgumentException。
    

    常用方法:

String getName()

以 String 形式返回此 Method 对象表示的方法名称。

Class<?>[] getParameterTypes()

按照声明顺序返回 Class 对象的数组,这些对象描述了此 Method 对象所表示的方法的形参类型。

int getModifiers()

按照声明顺序返回 Class 对象的数组,这些对象描述了此 Method 对象所表示的方法的形参类型。

Object invoke(Object obj, Object... args)

对带有指定参数的指定对象调用由此 Method 对象表示的底层方法。

Object getDefaultValue()

返回由此 Method 实例表示的注释成员的默认值。

6.Field类

Field 提供有关类或接口的单个字段的信息,以及对它的动态访问权限。反射的字段可能是一个类(静态)字段或实例字段。
构造方法:
无自己的构造方法是通过Class类去创建

常用方法:

方法名
含义
void set(Object obj, Object value)
将指定对象变量上此 Field 对象表示的字段设置为指定的新值。
Object get(Object obj)
返回指定对象上此 Field 表示的字段的值。
String getName()
返回此 Field 对象表示的字段的名称。
Class<?> getType()
返回一个 Class 对象,它标识了此 Field 对象所表示字段的声明类型。
 int getModifiers()
以整数形式返回由此 Field 对象表示的字段的 Java 语言修饰符。
     注:对于  int getModifiers() 方法
           1 == Modifier.PUBLIC  2== Modifier.PRIVATE
           4 == Modifier.PROTECTED 8 == Modifier.STATIC  16== Modifier.FINAL
        
  • 29
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值