当前位置: 首页 > news >正文

[CareerCup] 14.5 Object Reflection 对象反射

 

14.5 Explain what object reflection is in Java and why it is useful.

 

Java中的对象反射机制可以获得Java类和对象的反射信息,并可采取如下操作:

1. 在运行阶段获得类内部的方法和字段信息

2. 新建类的实例

3.通过获取字段引用来获得和舍弃对象字段,无论该字段是私有还是公有的。

 

下列代码是对象反射的一个例子:

// Parameters
Object[] doubleArgs = new Object[] {4.2, 3.9};
// Get class
Class rectangleDefinition = Class.forNmae("MyProj.Rectangle");
// Equivalent: Rectange = new Rectangle(4.2, 3.9);
Class[] doubleArgsClass = new Class[] {double.class, double.class};
Constructor doubleArgsConstructor = rectangleDefinition.getConstructor(doubleArgsClass);
Rectangle rectangle = (Rectangle) doubleArgsConstructor.newInstance(doubleArgs);
// Equivalent: Double area = rectangle.area();
Method m = rectangleDefinition.getDeclaredMethod("area");
Double area = (Double) m.invoke(rectangle);

// This code does the equivalent of 
Rectangle rectangle = new Rectange(4.2, 3.9);
Double area = rectangle.area();

 

对象反射为什么有用?

1. 观测和操控应用运行时的行为

2. 帮助调试和测试程序,通过直接接触到方法,构造函数和字段

3. 我们可以调用方法即便我们事先不知道该方法。比如,我们可以让用户传入类名称,构建函数的参数,和方法名称。我们利用这些信息区建立一个对象并调用一个方法。

 

想了解更多关于Java反射机制的内容,可以参见Java 反射机制学习资料。

相关文章:

  • Windows Phone 应用发布技巧汇总
  • spring xmlns配置
  • 杭电 2680 Choose the best route
  • 【转】已知一个数出现的次数严格超过了一半,请用O(n)的复杂度的算法找出这个数...
  • 常怀谦卑惭愧心
  • Java开发者必读的10篇精选优秀技术文章
  • C++/C学习笔记(五)
  • Referer防盗链
  • 信息安全系统设计基础 实验二固件设计 20135327郭皓 20135329 李海空
  • Linux设备驱动并发控制详解(自旋锁,信号量)
  • git patch
  • [ActionScript][AS3]小小笔记
  • 关于Unity3D的学习曲线问题
  • js如何读取客户端Excel文件
  • Hadoop学习笔记—15.HBase框架学习(基础实践篇)
  • [Vue CLI 3] 配置解析之 css.extract
  • 2017年终总结、随想
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • log4j2输出到kafka
  • React中的“虫洞”——Context
  • supervisor 永不挂掉的进程 安装以及使用
  • uni-app项目数字滚动
  • V4L2视频输入框架概述
  • vue 个人积累(使用工具,组件)
  • 安卓应用性能调试和优化经验分享
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 马上搞懂 GeoJSON
  • 时间复杂度与空间复杂度分析
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 【云吞铺子】性能抖动剖析(二)
  • C# - 为值类型重定义相等性
  • MPAndroidChart 教程:Y轴 YAxis
  • ​secrets --- 生成管理密码的安全随机数​
  • ​ubuntu下安装kvm虚拟机
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #ubuntu# #git# repository git config --global --add safe.directory
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (二)正点原子I.MX6ULL u-boot移植
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • .gitignore文件—git忽略文件
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .NET Standard / dotnet-core / net472 —— .NET 究竟应该如何大小写?
  • .NET成年了,然后呢?
  • .net反混淆脱壳工具de4dot的使用
  • .NET中两种OCR方式对比
  • @RequestMapping-占位符映射