java 反射基础

1、反射机制

反射就是把Java类中的各个成分映射成一个个的Java对象。即在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能调用它的任意一个方法和属性。这种动态获取信息及动态调用对象方法的功能叫Java的反射机制。

1.1 反射机制的功能

  Java反射机制主要提供了以下功能:

  • 在运行时判断任意一个对象所属的类。
  • 在运行时构造任意一个类的对象。
  • 在运行时判断任意一个类所具有的成员变量和方法。
  • 在运行时调用任意一个对象的方法。
  • 生成动态代理

1.2获取class对象的方式

  • 1、Class.forName(“全类名”) 将字节码文件加载进内存,返回class对象

    • 多用于配置文件的读取,将类名定义在配置文件中。读取文件加载类
  • 2、类名.class:通过类名熟悉class获取

    • 多用于参数传递
  • 3、对象.getClass:方法在Object类中的定义

    • 多用于对象获取字节码的方式

1.3 Class对象功能

  • 获取功能

    • 获取成员变量们

      • public Field[] getDeclaredFields()
        
        1
        2
        3

        * ```tsx
        public Field getDeclaredField(String name)
      • public Field[] getFields() 获取publc修饰的
        
        1
        2
        3

        * ```tsx
        public Field getField(String name) 获取publc修饰的
    • 获取构造方法

      1
      2
      3
      4
      public Constructor<?>[] getDeclaredConstructors()
      public Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes)
      public Constructor<?>[] getConstructors() 获取publc修饰的
      public Constructor<T> getConstructor(Class<?>... parameterTypes) 获取publc修饰的
    • 获取成员方法们

      1
      public Method[] getMethods() 获取publc修饰的
      1
      2
      public Method getMethod(String name,
      Class<?>... parameterTypes) 获取publc修饰的
    • public Method[] getDeclaredMethods()
      
      1
      2
      3
      4

      ```java
      public Method getDeclaredMethod(String name,
      Class<?>... parameterTypes)
    • 获取类名

    getName()

    带Declared的方法,需要设置setAccessible(true)方法 称为暴力反射

2 、基本数据类型和数组实例

2.1、Java中9大内置基本数据类型

byte,short,int,long,char,float,double,boolean,void关键字

2.2、数组实例

每个数组属于被映射为 Class 对象的一个类,所有具有相同元素类型和维数的数组都共享该 Class 对象

表示数组的Class实例:

String[] sArr1 = {“A”,”C”};

Class clz = String[].class;//此时clz表示就是一个String类型的一位数组类型