谈谈对java反射的理解

我不是女神ヾ 2023-06-17 11:57 60阅读 0赞

1. java反射机制的概念

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

2.反射的功能

  • 在运行时判断任意一个对象所属的类
  • 在运行时构造任意一个类的对象
  • 在运行时判断任意一个类所具有的成员变量和方法(通过反射甚至可以调用private方法)
  • 在运行时调用任意一个对象的方法
  • 生成动态代理

3.反射的基本运用(常用的API)

反射相关的类一般都在java.lang.reflect包中
(1)获得class对象(三种方式)

  1. 使用class类的forName静态方法
    例如:Class.forName(driver);
  2. 直接获取某一个对象的class
    例如:Class<?> classz = int.class;
    Class<?> classInt = Integer.TYPE;
  3. 调用某个对象的getClass()方法
    例如:StringBuilder str = new StringBuilder(“123”);
    Class<?> klass = str.getClass();

(2)判断是否为某个类的实例
一般使用isInstance关键字来判断是否为某个类的实例,同时也可以借助反射中的Class对象的isInstance()方法来判断是否为某个类的实例,它是一个native方法.
(3)创建实例(两种方式)

  1. 使用Class对象额newInstance()方法来创建Class对象对应的实例

    Class<?> c = String.class;
    Object str = c.newInstance();

  2. 先通过Class对象获取指定的Constructor对象,再调用Constructor对象的newInstance()方法来创建实例.

    //获取string所对应的Class对象
    Class<?> c = String.class;
    //获取String类带一个String参数的构造器
    Constructor constructor = c.getConreuctor(String.class);
    //根据构造器创建实例
    Object obj = contructor.newInstance(“2222”);

(4)获取方法

  • getDeclaredMethods() ——返回类或接口声明的所有方法,包括公共,保护,默认(包)访问和私有方法,但是不包括继承的方法.
  • getMethods()——返回某个类的所有公用方法,包括其继承类的公用方法. 它还可以获取父类的方法
  • getMethod() ——- 返回一个特定的方法

(5)获取构造器信息
(6)获取类的成员变量(字段)信息

  • getFiled() ———访问共有的成员变量
  • getDeclaredField() ——- 所有已声明的成员变量,但不能得到父类的成员变量

(7)调用方法—invoke()方法
(8)利用反射创建数组

4.反射的优缺点

优点
反射提高了程序的灵活性,降低耦合性,提高自适应能力,它允许程序创建和控制任何类的对象,无需提前硬编码目标类.
缺点
性能问题,反射会消耗一定的系统资源,若不需要动态创建对象,那就不需要反射,反射调用方法时可以忽略权限检查,因此可能破坏封装性而导致的安全问题

5.反射的使用场景

JDBC,动态代理,工厂模式,SSM框架,dubbo框架,其他的框架,获取第三方类(没有源码),封装框架等

发表评论

表情:
评论列表 (有 0 条评论,60人围观)

还没有评论,来说两句吧...

相关阅读