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

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

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

2. 新建类的实例

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

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

  1. // Parameters
  2. Object[] doubleArgs = new Object[] {4.2, 3.9};
  3. // Get class
  4. Class rectangleDefinition = Class.forNmae("MyProj.Rectangle");
  5. // Equivalent: Rectange = new Rectangle(4.2, 3.9);
  6. Class[] doubleArgsClass = new Class[] {double.class, double.class};
  7. Constructor doubleArgsConstructor = rectangleDefinition.getConstructor(doubleArgsClass);
  8. Rectangle rectangle = (Rectangle) doubleArgsConstructor.newInstance(doubleArgs);
  9. // Equivalent: Double area = rectangle.area();
  10. Method m = rectangleDefinition.getDeclaredMethod("area");
  11. Double area = (Double) m.invoke(rectangle);
  12.  
  13. // This code does the equivalent of
  14. Rectangle rectangle = new Rectange(4.2, 3.9);
  15. 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. 解决log4j:WARN Error initializing output writer. log4j:WARN Unsupported encoding?的问题

    异常名:log4j:WARN Error initializing output writer. log4j:WARN Unsupported encoding? 异常截图: 在一般的javaweb项 ...

  2. bat自动执行telnet

    @del c:\temp.vbs @echo on error resume next >>c:\temp.vbs @echo dim WshShell>>c:\temp.vb ...

  3. 5+ App开发入门指南

    HTML5 Plus应用概述 HTML5 Plus移动App,简称5+App,是一种基于HTML.JS.CSS编写的运行于手机端的App,这种App可以通过扩展的JS API任意调用手机的原生能力,实 ...

  4. 叶金荣:MySQL通用优化技巧

    转自:http://mp.weixin.qq.com/s?__biz=MjM5NDE0MjI4MA==&mid=208777870&idx=1&sn=6efddd6283e4d ...

  5. 基于注解配置的Spring MVC 简单的HelloWorld实例应用

    2.1 问题 使用注解的方式重构helloworld应用案例. 2.2 方案 1. @RequestMapping注解应用 @RequestMapping可以用在类定义和方法定义上,它标明这个类或方法 ...

  6. puppet学习笔记(一)

    之前搞了一个月zabbix,基本上是能熟练使用了,不过在后来部署的时候发现这玩意在部署的时候机子少还行,机子多了手动安装手会残的.第一反应是用puppet,后来师父直接用puppet搞定了.索性自己也 ...

  7. Sql Practice 2

    之前写了一个SP用来向dimention table插入0 -1 dummy row的值,但今天在process adventureworksdw2008示例 数据库的时候报错,查看了一下,是因为自己 ...

  8. c++ static变量

    C++中Static作用和使用方法   1.什么是static?  static是C++中很常用的修饰符,它被用来控制变量的存储方式和可见性. 2.为什么要引入static?   函数内部定义的变量, ...

  9. 基于go-ceph创建CEPH块设备及快照

    一.代码执行前准备 1.系统中安装了CEPH集群 2.GOPATH目录下存在src/github.com/noahdesu/go-ceph代码库 3.在ubuntu 14.04下还需apt-get l ...

  10. 矩阵乘法快速幂 codevs 1250 Fibonacci数列

    codevs 1250 Fibonacci数列  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond   题目描述 Description 定义:f0=f1=1 ...