初识Java反射
要详细的了解Java反射,就得要了解Java的类加载以及何为运行时动态加载等等概念。本文抛开其余概念,简单介绍Java反射,详细介绍会在以后有一个系统而全面的认识过后展开。
反射是Java被视为动态语言的关键,它允许程序在运行时取得任何类的内部信息。Java的这个能力或许在Web应用中用得不是很多,但在一些Java组件开发过程中非常常见,比如Spring、Hibernate等都以此为基础。了解并熟知Java反射机制对我们了解Java框架有很大的帮助。
我们首先写好一个Test类,并将它编译为class字节码。
/**
* @author turbo
*
* 2016年9月17日
*/
public class Test {
public void test(){
System.out.println("类加载反射测试");
}
}
编译好过后,我们在eclipse中另外新建一个包并新建一个Main.java类,将此Test.class文件放入eclipse工作空间的.bin目录的该文件夹类。此时我们在eclipse的工程中看到的目录如下:

我们在eclipse的工作空间的.bin目录看到的文件如下:

我们通常的写法是两个Java文件互相调用,现在只有class文件,要怎么来调用Test类中的方法呢?我们来看看Main.java类是怎么做到的。
package day_12_class; import java.lang.reflect.Method; /**
* @author turbo
*
* 2016年9月17日
*/
public class Main { /**
* @param args
* */
public static void main(String[] args) throws Exception {
Class<?> clazz = Class.forName("Test");
Object object = clazz.newInstance();
Method method = clazz.getMethod("test");
method.invoke(object);
} }
首先来了解Class类是什么,JVM通常使用运行时类型信息选择正确方法去执行,用来保存这些类型信息的类就是Class类。每个Java类在运行时在JVM里都表现为一个Class对象,如上表示可通过调用静态方法forName通过Test类名返回Class对象。此时还是Class对象,注意它不是Object类,通过调用Class的newInstance方法来返回一个实例。
Method类提供关于类或接口上某个方法的信息,它用来封装反射类方法的一个类。同样通过Class的getMethod方法传入方法名来返回Method类。关于getMethod方法的API描述如下:

获取Method类后我们调用invoke方法即可执行Test类中的test方法。关于invoke方法的API如下:

最后我们来看看执行结果:

成功利用Java反射机制调用Test类中的方法。
由于对Java反射、类加载等知识认识得还不够全面和深入,不敢在此乱讲,所以这里只初始Java反射是个什么,它怎么用用在什么地方,它的执行过程到底是怎么样的,它的原理是什么等等还有待去深入学习。
初识Java反射的更多相关文章
- 初识Java反射机制
1.ClassLoader的类加载机制:并非一次性加载,而是需要的时候加载(运行期间动态加载)(Class文件加载到内存的代码段),static语句块在加载后执行一次.dynamic语句块(就是一个语 ...
- java反射教程
什么是反射,为什么它是有用的,以及如何使用它? 1.什么是反射? “反射通常是JVM中运行的程序需要检测和修改运行时程序的行为的一种能力.”这个概念通常与内省(Introspection)混淆.以下是 ...
- 第28章 java反射机制
java反射机制 1.类加载机制 1.1.jvm和类 运行Java程序:java 带有main方法的类名 之后java会启动jvm,并加载字节码(字节码就是一个类在内存空间的状态) 当调用java命令 ...
- Java反射机制
Java反射机制 一:什么事反射机制 简单地说,就是程序运行时能够通过反射的到类的所有信息,只需要获得类名,方法名,属性名. 二:为什么要用反射: 静态编译:在编译时确定类型,绑定对象,即通过 ...
- java反射(基础了解)
package cn.itcast_01; /** *Person类 */ public class Person { /** 姓名 */ private String name; ...
- java基础知识(十一)java反射机制(上)
java.lang.Class类详解 java Class类详解 一.class类 Class类是java语言定义的特定类的实现,在java中每个类都有一个相应的Class对象,以便java程序运行时 ...
- java基础知识(十一)java反射机制(下)
1.什么是反射机制? java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象都能够调用他的属性和方法,这种动态获取属性和方法的功能称为java的反射机制. ...
- java反射学习之二万能EXCEL导出
一.EXCEL导出的实现过程 假设有一个对象的集合,现在需要将此集合内的所有对象导出到EXCEL中,对象有N个属性:那么我们实现的方式是这样的: 循环这个集合,在循环集合中某个对象的所有属性,将这个对 ...
- java反射学习之一反射机制概述
一.反射机制背景概述 1.反射(reflection)是java被视为动态语言的一个关键性质 2.反射机制指的是程序在运行时能获取任何类的内部所有信息 二.反射机制实现功能概述 1.只要给定类的全名, ...
随机推荐
- PRINCE2的发展情况是什么样
英国皇家特许培训机构AXELOS近期公布了一份调查结果,调查共有172位项目经理参与,其结果展示了未来全球趋势,对项目经理未来的职业形态和对他们必备技能的影响. 未来的项目管理职业 调查结果同时给 ...
- SERVLET中的doGet与doPost两个方法之间的区别
get和post是http协议的两种方法,另外还有head, delete等 这两种方法有本质的区别,get只有一个流,参数附加在url后,大小个数有严格限制且只能是字符串.post的参数是通过另外的 ...
- iOS9,10没有问题,iOS8上面一登录就崩溃,原因Assets的问题
在项目中开发中,打包成一个ipa的包,发现iOS9,10,运行非常流畅,iOS8上面一运行就崩溃,找了好久,才找到原因竟然是Assets的问题,一开始我把ipa包放在蒲公英上面托管扫码下载的,用iTu ...
- 【转】JSON和JSONP
前言 由于Sencha Touch 2这种开发模式的特性,基本决定了它原生的数据交互行为几乎只能通过AJAX来实现. 当然了,通过调用强大的PhoneGap插件然后打包,你可以实现100%的Soc ...
- [原]android sdk更新的终极解决方案
由于众所周知的原因,国内更新Android SDK一直是个老大难的事情,一般都要到处找VPN之类的工具来曲线救国.不过其实谷歌已经帮我们想到这点了,我们自身就可以解决问题,步骤如下: 打开SDK Ma ...
- 线上分享会.net框架“ABP”分享会总结
前言 为了能够帮助.Net开发者开拓视野,更好的把最新的技术应用到工作中,我在3月底受邀到如鹏网.net训练营直播间为各位学弟学妹们进行ABP框架的直播分享.同时为了让更多的.NET开发者了解ABP框 ...
- 利用原生JS判断组合键
<script type="text/javascript"> var isAlt = 0; var isEnt = 0; document.onkeydown = f ...
- jQuery控制元素隐藏和显示
1.jQuery隐藏和显示效果 通过 jQuery,您可以使用 hide() 和 show() 方法来隐藏和显示 HTML 元素: $("#hide").click(functio ...
- ORACLE中关于外键缺少索引的探讨和总结
在ORACLE数据库中,定义外键约束时,ORACLE是不会自动创建对应索引的,必须手动在外键约束相关的列上创建索引.那么外键字段上是否有必要创建索引呢?如果有必要的话,巡检时,如何找出外键字段上没有创 ...
- HTML解析器BeautifulSoup
BeautifulSoup是Python的一个库,可解析用urllib2抓取下来的HTML 1.Beautiful Soup 安装 可以利用 pip 来安装,在Python程序中导入 pip inst ...