[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 反射机制学习资料。
[CareerCup] 14.5 Object Reflection 对象反射的更多相关文章
- python对象反射和函数反射
python的对象反射功能,经常在编程时使用.相比较其它的编程语言使用非常方便.反射就是用字符串来操作对象或者类,模块中的成员. 一.对象的反射 反射功能的实现,由这4个内置函数来实现(hasattr ...
- java Reflection(反射)基础知识讲解
原文链接:小ben马的java Reflection(反射)基础知识讲解 1.获取Class对象的方式 1.1)使用 "Class#forName" public static C ...
- js object(对象)
http://www.cnblogs.com/pingchuanxin/p/5773326.html Object(对象)是在所有的编程语言中都十分重要的一个概念,对于事物我们可以把他们看作是一个对象 ...
- Objective -C Object initialization 对象初始化
Objective -C Object initialization 对象初始化 1.1 Allocating Objects 分配对象 Allocation is the process by w ...
- 两种方式实现浅拷贝 for in实现和Object.assign({}, 对象1, 对象2);
浅拷贝只拷贝对象的一层,如果对象的属性还是对象,那么user3和user4这两个对象对应的值都会发生改变 // 拷贝分为浅拷贝和深拷贝. // 浅拷贝的实现 通过for in实现 var user1 ...
- 14. 深入解析Pod对象(一)
14. 深入解析Pod对象(一) """ 通过前面的讲解,大家应该都知道: Pod,而不是容器,它是 Kubernetes 项目中的最小编排单位.将这个设计落实到 API ...
- vue2.x版本中Object.defineProperty对象属性监听和关联
前言 在vue2.x版本官方文档中 深入响应式原理 https://cn.vuejs.org/v2/guide/reactivity.html一文的解释当中,Object.defineProperty ...
- .net Reflection(反射)- 二
反射 Reflection 中访问方法 新建一个ClassLibrary类库: public class Student { public string Name { get; set; } publ ...
- .net Reflection(反射)- 一
Reflection 反射需要引用 using System.Reflection; 命名空间. 通过 Assembly 类的 Load( ); 加载指定的 程序集 Assembly 是不能被实例化 ...
随机推荐
- 解决log4j:WARN Error initializing output writer. log4j:WARN Unsupported encoding?的问题
异常名:log4j:WARN Error initializing output writer. log4j:WARN Unsupported encoding? 异常截图: 在一般的javaweb项 ...
- bat自动执行telnet
@del c:\temp.vbs @echo on error resume next >>c:\temp.vbs @echo dim WshShell>>c:\temp.vb ...
- 5+ App开发入门指南
HTML5 Plus应用概述 HTML5 Plus移动App,简称5+App,是一种基于HTML.JS.CSS编写的运行于手机端的App,这种App可以通过扩展的JS API任意调用手机的原生能力,实 ...
- 叶金荣:MySQL通用优化技巧
转自:http://mp.weixin.qq.com/s?__biz=MjM5NDE0MjI4MA==&mid=208777870&idx=1&sn=6efddd6283e4d ...
- 基于注解配置的Spring MVC 简单的HelloWorld实例应用
2.1 问题 使用注解的方式重构helloworld应用案例. 2.2 方案 1. @RequestMapping注解应用 @RequestMapping可以用在类定义和方法定义上,它标明这个类或方法 ...
- puppet学习笔记(一)
之前搞了一个月zabbix,基本上是能熟练使用了,不过在后来部署的时候发现这玩意在部署的时候机子少还行,机子多了手动安装手会残的.第一反应是用puppet,后来师父直接用puppet搞定了.索性自己也 ...
- Sql Practice 2
之前写了一个SP用来向dimention table插入0 -1 dummy row的值,但今天在process adventureworksdw2008示例 数据库的时候报错,查看了一下,是因为自己 ...
- c++ static变量
C++中Static作用和使用方法 1.什么是static? static是C++中很常用的修饰符,它被用来控制变量的存储方式和可见性. 2.为什么要引入static? 函数内部定义的变量, ...
- 基于go-ceph创建CEPH块设备及快照
一.代码执行前准备 1.系统中安装了CEPH集群 2.GOPATH目录下存在src/github.com/noahdesu/go-ceph代码库 3.在ubuntu 14.04下还需apt-get l ...
- 矩阵乘法快速幂 codevs 1250 Fibonacci数列
codevs 1250 Fibonacci数列 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 定义:f0=f1=1 ...