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 反射机制学习资料

[CareerCup] 14.5 Object Reflection 对象反射的更多相关文章

  1. python对象反射和函数反射

    python的对象反射功能,经常在编程时使用.相比较其它的编程语言使用非常方便.反射就是用字符串来操作对象或者类,模块中的成员. 一.对象的反射 反射功能的实现,由这4个内置函数来实现(hasattr ...

  2. java Reflection(反射)基础知识讲解

    原文链接:小ben马的java Reflection(反射)基础知识讲解 1.获取Class对象的方式 1.1)使用 "Class#forName" public static C ...

  3. js object(对象)

    http://www.cnblogs.com/pingchuanxin/p/5773326.html Object(对象)是在所有的编程语言中都十分重要的一个概念,对于事物我们可以把他们看作是一个对象 ...

  4. Objective -C Object initialization 对象初始化

    Objective -C Object initialization 对象初始化 1.1 Allocating Objects  分配对象 Allocation is the process by w ...

  5. 两种方式实现浅拷贝 for in实现和Object.assign({}, 对象1, 对象2);

    浅拷贝只拷贝对象的一层,如果对象的属性还是对象,那么user3和user4这两个对象对应的值都会发生改变 // 拷贝分为浅拷贝和深拷贝. // 浅拷贝的实现 通过for in实现 var user1 ...

  6. 14. 深入解析Pod对象(一)

    14. 深入解析Pod对象(一) """ 通过前面的讲解,大家应该都知道: Pod,而不是容器,它是 Kubernetes 项目中的最小编排单位.将这个设计落实到 API ...

  7. vue2.x版本中Object.defineProperty对象属性监听和关联

    前言 在vue2.x版本官方文档中 深入响应式原理 https://cn.vuejs.org/v2/guide/reactivity.html一文的解释当中,Object.defineProperty ...

  8. .net Reflection(反射)- 二

    反射 Reflection 中访问方法 新建一个ClassLibrary类库: public class Student { public string Name { get; set; } publ ...

  9. .net Reflection(反射)- 一

    Reflection 反射需要引用 using System.Reflection; 命名空间.  通过 Assembly 类的 Load( ); 加载指定的 程序集 Assembly 是不能被实例化 ...

随机推荐

  1. 小波说雨燕 第三季 构建 swift UI 之 UI组件集-视图集(一)视图共性 学习笔记

    如果想进行自定义的配置,可以继承基类UIView. 地图app中需要多点触动Multiple Touch, opaque不透明的 hidden隐藏的 比如下载的进度条,如果下载完毕,可以通过设置这个属 ...

  2. FFT教你做乘法(FFT傅里叶变换)

    题目来源:https://biancheng.love/contest/41/problem/C/index FFT教你做乘法 题目描述 给定两个8进制正整数A和B(A和B均小于10000位),请利用 ...

  3. 《数据结构与算法JavaScript描述》

    <数据结构与算法JavaScript描述> 基本信息 作者: (美)Michael McMillan 译者: 王群锋 杜欢 丛书名: 图灵程序设计丛书 出版社:人民邮电出版社 ISBN:9 ...

  4. 【php】mysql全局ID生成方案

    生产系统随着业务增长总会经历一个业务量由小变大的过程,可扩展性是考量数据库系统高可用性的一个重要指标;在单表/数据库数据量过大,更新量不断飙涨时,MySQL DBA往往会对业务系统提出sharding ...

  5. fis自动化部署

    1,自动部署到远程服务器 (1),参考:https://github.com/fex-team/receiver (2),接收服务代码目录:/var/www/html/fis/receiver-mas ...

  6. Linux内核阅读相关

    一.likely()与unlikely()函数的意义 http://blog.chinaunix.net/uid-27665626-id-3506567.html 二.TSO.UFO.GSO.LRO. ...

  7. 使用spring-test报异常org.springframework.asm.ClassReader.<init>(Unknown Source)

    spring3.x需要jdk1.7或以下版本 spring4.x与jdk1.8配合使用

  8. Excel中利用IF和TIME函数计算出上下班状态!

    大家都知道现在上下班实行打卡制,制作考勤的人员需要对你上下班的时间,计算出上下班的状态,比如:迟到.早退.加班.正常等.下面为您介绍一个“帮手”.     1.打开Excel文档.如下图       ...

  9. Hive2 jdbc test

    package andes; import java.io.BufferedWriter; import java.io.FileOutputStream; import java.io.IOExce ...

  10. Half Wavelength Dipole Antenna

    Reference : 1. wikipedia The dipole antenna is the simplest and most widely used class of antenna.It ...