Java基础 200320

1. 什么是反射?反射的应用场景?

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

获取类对象的三种方式:

  • 通过 object 类的 getClass () 函数,由于 object 是根类,每一个类都有这个函数

  • 每一个类(包括基本数据类型,注意这里基本数据类型不用转成包装类)都有一个 class 属性,静态属性,通过类名直接访问

  • 通过 Class 类的静态方法 forName(String className)

应用:

  • 反射是很多框架的基础
  • 通过反射运行配置文件
  • 通过反射越过泛型检查

2. 代理模式有什么用?应用场景是什么?

代理(Proxy)模式是结构型的设计模式之一,它可以为其他对象提供一种代理(Proxy)以控制对这个对象的访问。所谓代理,是指具有与被代理的对象具有相同的接口的类,客户端必须通过代理与被代理的目标类交互。

应用场景:

  • 需要控制对目标对象的访问。
  • 需要对目标对象进行方法增强。如:添加日志记录,计算耗时等。
  • 需要延迟加载目标对象。

3. 动态代理的实现方式都有什么?那种实现效率高?

实现动态代理的两种方式: JDK 动态代理和 Gglib 动态代理

  • JDK 动态代理是实现了被代理对象的接口, Cglib 是继承了被代理对象。

  • JDK 和 Cglib 都是在运行期生成字节码,JDK 是直接写 Class 字节码,Cglib 使用 ASM 框架写 Class 字节码,Cglib 代理实现更复杂,生成代理类比 JDK 效率低。

  • JDK 调用代理方法,是通过反射机制调用,Cglib 是通过 FastClass 机制直接调用方法,Cglib 执行效率更高。


4. 动态代理是什么?与静态代理的区别在于?

Java 中的静态代理要求代理主题 (ProxySubject) 和真实主题 (RealSubject) 都实现同一个接口 (Subject)。静态代理中代理类在编译期就已经确定,而动态代理则是 JVM 运行时动态生成,静态代理的效率相对动态代理来说相对高一些,但是静态代理代码冗余大,一但需要修改接口,代理类和委托类都需要修改。


【Java 面试那点事】

这里致力于分享 Java 面试路上的各种知识,无论是技术还是经验,你需要的这里都有!

这里可以让你【快速了解 Java 相关知识】,并且【短时间在面试方面有跨越式提升】

面试路上,你不孤单!
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员世杰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值