核心反射机制java.lang.reflect提供了“通过程序来访问关于已装载的类的信息”的能力,给定一个Class实例,可以获得Constructor、Method、Field实例,这些对象提供“通过程序来访问类的成员名称、域类型、方法签名等信息”的能力。

反射机制允许一个类使用另一个类,即使当前者被编译的时候后者还根本不存在,存在的代价:

1.失去编译时类型检查的好处,包括异常检查。

2.执行反射访问所需的代码很长。

3.性能上的损失。

反射机制的使用场景

反射功能只是在设计时被用到,通常,普通应用程序在运行时不应该以反射的方式访问对象。

有些复杂的应用程序需要使用反射机制,包括类浏览器、对象检测器、代码分析工具、解释型的内嵌式系统。在RPC中使用反射机制也是合适的,这样就不再需要存根编译器。

对于有些程序,必须用到在编译时无法获取的类,但是在编译时存在适当的接口或者超类,通过它们可以引用这个类,就可以以反射的方式创建实例,然后通过它们的接口或者超类,以正常的方式访问这些实例。

反射机制的例子

创建Set实例,吧命令行参数插入到集合中,然后打印该集合,其中第一个参数指定打印的结果,如果是HashSet以随机的方式打印出来,如果是TreeSet按照字母顺序打印出来的程序:

public static void main(String[] args) {Class<?> c = null;try {c = Class.forName(args[0]);} catch(ClassNotFoundException e) {System.out.println("Class not found");System.exit(1);}Set<String> s = null;try {s = (Set<String>) c.newInstance();} catch(IllegalAccessException e) {System.out.println("Class not accessible");System.exit(1);} catch(InstantiationException e) {System.out.println("Class not instantiable");System.exit(1);}s.addAll(Arrays.asList(args).subList(1, args.length));System.out.println(s);
}

这相当于一个集合测试器,通过反射测试Set实现,同时,它也可以作为通用的集合性能分析工具。
这种方法足以完成成熟的服务提供者框架。
具体怎么实现,可以去看一下这篇文章
服务提供者框架

Effective Java之接口优先于反射机制(五十三)相关推荐

  1. Effective Java 学习笔记(第53条:接口优先于反射机制)

    核心反射机制(core reflection facility)java.lang.reflect,提供了"通过程序来访问关于已装载的类的信息"的能力. 丧失了编译时类型检查的好处 ...

  2. java如何用反射把具体方法抽象_如何在Java 中使用泛型或反射机制对DAO进行抽象...

    如何在Java 中使用泛型或反射机制对DAO进行抽象 发布时间:2020-11-26 16:07:42 来源:亿速云 阅读:80 作者:Leah 本篇文章为大家展示了如何在Java 中使用泛型或反射机 ...

  3. Java学习总结:39(反射机制)

    反射机制 JAVA中反射是动态获取信息以及动态调用对象方法的一种反射机制. Java反射就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属 ...

  4. java学习之路 之 反射机制综合练习题、动态代理实例

    在上一篇博文中我们已经进行了反射机制的习题练习,这里我们在做一个考察比较全面的练习,如下: 写一个类ReflectUtil类, 类中写一个静态方法Object methodInvoker(String ...

  5. Java基础知识——类装载器与反射机制

    类装载器ClassLoader 类装载器就是寻找类的字节码文件,并构造出类在JVM内部表示的对象组件. 类装载器把一个类装入JVM中,要经过三步: 1.装载:查找和导入Class文件: 2.链接:执行 ...

  6. java class 生成对象_Java反射机制(创建Class对象的三种方式)

    1:SUN提供的反射机制的类: java.lang.Class java.lang.reflect.Constructor java.lang.reflect.Field java.lang.refl ...

  7. java 操作属性值_java反射机制根据属性名获取属性值的操作

    一.考虑安全访问范围内的属性,没有权限访问到的属性不读取 /** * 根据属性名获取属性值 * * @param fieldName * @param object * @return */ priv ...

  8. 反射在java中的应用_java反射机制在项目中的运用

    定义:Reflection是java开发语言特性之一,它允许运行中的java程序对自身进行检测,自审,并能操作程序内部的属性和方法,Reflection是java被视为动态语言关键之一.允许程序从执行 ...

  9. java 内存接口_java中多态机制的内存解析、抽象类、接口

    1.多态机制的内存解析 1).多态的三要素 *类之间具有相互继承关系: *子类重写父类的方法: *父类引用指向子类对象: 2).为了更加细致深入的了解多态运行的机制,将下列代码的在内存中运行的简图绘制 ...

最新文章

  1. 盛大 牛人 blog
  2. 【资源共享】《Rockchip 量产烧录 指南 V1.0》
  3. 微信小程序技巧-让特定组件首页始终展示修改编译条件即可,不用改json
  4. mysql dump 选项_mysqldump的几个主要选项探究
  5. Dapr微服务应用开发系列5:发布订阅构建块
  6. vue事件委托传递节点防止向下传递穿透
  7. electron 改变窗体 大小_「Science子刊」约翰·霍普金斯大学创造灰尘大小设备,可协助药物在胃肠道停留24小时之久...
  8. 车联网中如何应用大数据
  9. 你对NLP的迁移学习爱的有多深?21个问题弄懂最新的NLP进展。
  10. 雷云3 Razer Synapse官方版-雷云3 Razer Synapse官方版下载
  11. Bandicam一款值得被吹爆的录屏软件
  12. mac分区后数据丢失怎么恢复?
  13. 关于AWB的肤色问题
  14. LQ0122 等腰三角形【打印图形】
  15. 关于文字转base64,base64转文字的坑(数字短信)
  16. 产品设计 【互联网产品设计常用文档类型】
  17. 中国氢电解槽市场深度研究分析报告
  18. 我的世界java版怎么用结构方块_我的世界结构方块指令(获取结构方块和 使用方法)...
  19. linux怎么打代码爱心,使用css实现爱心效果
  20. 读米老师的《人际关系要全面》有感

热门文章

  1. Linux 下的 AddressSanitizer
  2. Android 图形驱动初始化
  3. HashedWheelTimer时间轮原理分析
  4. MySQL(五)MySQL事务
  5. 如何快速过滤出一次请求的所有日志?
  6. 【城市沙龙】LiveVideoStack Meet|杭州:多媒体新黄金时代
  7. 专访腾讯多媒体实验室商世东:咬咬牙也要跟上新版本的发布
  8. Bitmovin:视频开发者报告2018
  9. 令人惊叹的前端路由原理解析和实现方式
  10. linux平台关于内存,cpu,连接数,流量监控(一)