面试官: 反射了解么?

目录

反射

什么是反射 ?

获取Class对象的四种方式

反射相关API

类对象常用API

Filed常用API

Method常用API

Constructors常用API

反射的使用场景?

反射的实现原理 ?(todo)

反射为什么这么慢 ?

反射的优缺点

反射中,Class.forName和ClassLoader的区别 ?

int.class 与 Integer.class的区别是什么 ?

利用反射与工厂模式实现SpringIOC


反射

什么是反射 ?

对于反射

就类似于你想要进入一个房子,你没有钥匙,但是你知道这个房子是谁的,我们就可以通过反射API知道房子中的内部结构,具体都有啥.

也就是说通过反射你就可以构造对象,知道对象属于某个类,可以获取类的属性和方法,获取到我们就可以调用属性和方法, 这种动态获取程序信息的能力,以及动态调用对象的能力我们就称为反射.

在换句话讲,通过反射你就可以知道类的方法和属性,并可以调用它们

在Java中有一个java.lang.reflect这个包就是实现了反射相关的类库,比如Construct,Field,Method...

获取Class对象的四种方式

Class是反射的入口

如果我们动态获取到这些信息,我们需要依靠 Class 对象。Class 类对象将一个类的方法、变量等信息告诉运行的程序。Java 提供了四种方式获取 Class 对象:

1. 知道具体类的情况下可以使用:

Class alunbarClass = TargetObject.class;

但是我们一般是不知道具体类的,基本都是通过遍历包下面的类来获取 Class 对象,通过此方式获取 Class 对象不会进行初始化

2. 通过 Class.forName()传入类的全路径获取:

Class alunbarClass1 = Class.forName("cn.sfx.TargetObject");

3. 通过对象实例instance.getClass()获取:

TargetObject o = new TargetObject();
Class alunbarClass2 = o.getClass();

4. 通过类加载器xxxClassLoader.loadClass()传入类路径获取:

ClassLoader.getSystemClassLoader().loadClass("cn.sfx.TargetObject");

通过类加载器获取 Class 对象不会进行初始化,意味着不进行包括初始化等一系列步骤,静态代码块和静态对象不会得到执行

反射相关API

类对象常用API

Filed常用API

Method常用API

Constructors常用API

反射的使用场景?

  • 动态代理
  • 注解

反射的实现原理 ?(todo)

反射为什么这么慢 ?

反射的优缺点

优点 :

  • 提高程序的灵活性
    • 通过反射机制我们就可以让程序创建和控制任何类的对象

    • 通过反射机制,我们可以在程序运行的时候,判断对象所属的类,构造任意一个类的对象,获取到任意一个类所具有的方法,属性,可以动态的调用对象的方法

缺点 : 

  • 代码的可读性低
  • 反射破坏封装
  • 反射的代码性能极低

反射中,Class.forName和ClassLoader的区别 ?

int.class 与 Integer.class的区别是什么 ?

int.class是基本数据类型int的Class对象,用于获取基本数据类型的相关信息。
Integer.class是java.lang.Integer包装类的Class对象,用于获取包装类的相关信息。

利用反射与工厂模式实现SpringIOC

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值