博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
接口优于反射机制(53)
阅读量:6083 次
发布时间:2019-06-20

本文共 913 字,大约阅读时间需要 3 分钟。

hot3.png

核心反射机制(java.lang.reflect)

  • 提供了通过程序访问已装载类信息的途径
  • 给定一个Class实例,访问Constructor(构造器)、Method(方法)、Filed(域)

Constructor(构造器)、Method(方法)、Filed(域)实例使得你可以通过反射操作其底层对等体

  • 通过调用底层类的实例上的方法,可以构造底层类实例、调用底层类的方法、访问底层类的域
    • 例如Method.invoke 允许你调用任何对象的任何方法  
  • 反射机制允许一个类调用另一个类,即使前者被编译的时候,后者还不存在

反射需要付出代价

  • 丧失了编译时类型检查的好处,包括异常检查
    • 如果程序企图用反射调用不存在的类或方法,运行时会报错
  • 执行反射访问所用到的代码笨拙、冗长
    • 编写起来乏味、阅读起来困难
  • 性能损失
    • 反射方法调用比普通方法慢很多,亲测2倍~50倍不等

反射功能只能在设计时被用到

  • 普通应用程序通常应该以正常方式访问到对象,而不是以反射

一些复杂应用程序需要以反射方式访问应用程序

  • 比如类浏览器、对象监视器、代码分析器、解释型内嵌式系统
  • 在RPC(远程调用)时,使用反射机制也很合适,这样不用存根编译器

如下,创建了一个Set<String>

  • 传入参数是 java.util.HashSet、java.util.TreeSet
  • 稍加修改可编程可编程通用的集合测试器、或通用的集合性能分析工具

3d8b7471b1d0abca9bf55474c69478c2b23.jpg

上述实例演示反射机制俩缺点:

  1. 可能产生运行时错误,如果不用反射就是编译时错误
  2. 反射生成实例,代码冗长

System.exit(1)

  • 程序中很少点用这个方法,会终止jvm

类对于运行时可能不存在的其他类、方法或者域的属性,使用反射进行管理是合理的,但是很少用

如果要编写一个包,需要依赖其他包的不同版本,使用反射就非常有用

  • 这种方式允许使用最小环境进行编译,然后使用反射访问其他更新版本内容

反射机制是功能非常强大的机制

  • 如果编写的程序必须与编译时未知的类一起工作,请仅仅使用反射创建新实例
  • 使用实例的接口或者超类进行方法或域的访问

转载于:https://my.oschina.net/u/3847203/blog/1927225

你可能感兴趣的文章
php lock_sh共享锁 与 lock_ex排他锁
查看>>
codeigniter 对数据库的常用操作
查看>>
重装win7系统多个方法介绍
查看>>
Python之路
查看>>
IOS 消息推送---服务端.p12证书的生成
查看>>
mysql中将一个数据类型转换成另外的数据类型?mysql中cast函数的使用?
查看>>
URI URL URN
查看>>
获取当前进程的寄存器内容
查看>>
HDU 3642 Get The Treasury (线段树扫描线)
查看>>
AWK
查看>>
alpha 10
查看>>
C++中线程使用与参数传递
查看>>
VirtualBox中安装CentOS(新手教程)
查看>>
HTTP 请求头中的 X-Forwarded-For,X-Real-IP
查看>>
SDUT OJ 数据结构上机测试1:顺序表的应用
查看>>
d3----line_color_gradient 学习记录
查看>>
矩阵运算 【微软面试100题 第四十五题】
查看>>
E: Sub-process /usr/bin/dpkg returned an error code (1)
查看>>
Openshift 部署第一个应用hello-openshift
查看>>
XML学习总结
查看>>