初识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.只要给定类的全名, ...
随机推荐
- Linux批量清理多个文件内容而不删除文件
清理单个文件,可以这样:echo > myLog.log 但是,如果我要清理一堆文件,比如在/logs目录下面的所有以.log结尾的文件的内容,而不删除文件,该如何操作呢? 我一开始的语句是这样 ...
- Python之路-awk文本处理
作业一:整理博客,内容包含awk.变量.运算符.if多分支 一.awk 1.awk是一个优秀的文本处理工具,多用来处理含有特殊分隔符的内容 常见用法 awk -F: {print $1,$4} 作业 ...
- EntityFramework Core不得不注意的性能优化意外收获,你会用错?
前言 这两天在着实研究EF Core项目当中对于一些查询也没实际去检测,于是想着利用放假时间去实际测试下,结果本文就出来了,too young,too simple,后续博主会从底层翻译表达式树弄起, ...
- iOS项目之模拟请求数据
如何在iOS开发中更好的做假数据? 当工期比较紧的时候,项目开发中会经常出现移动端等待后端接口数据的情形,不但耽误项目进度,更让人有种无奈的绝望.所以在开发中,我们常常自己做些假数据,以方便开发和UI ...
- IOS设备型号(原创)
以下是我收集的ios目前为止移动设备型号,ipad air不知道,本人没有这款设备,求指导的给个回复,在这谢谢了 ///** //////////////////// 设备类型 字符串 /// ...
- windows环境搭建jira 详解
一.事前准备 1:JDK下载并安装:http://www.oracle.com/technetwork/java/javase/downloads/index.html2:MySQL JDBC连接驱动 ...
- NodeJs之http
创建新的服务器 创建一个简单的服务 var http = require("http"); var server = http.createServer(); server.lis ...
- 第五章 HQL实用技术
第五章 HQL实用技术5.1 使用HQL查询语句(面向对象查询语句) 5.1.1 编写HQL语句 5.1.1.1 from子句 例:fr ...
- 【HDOJ 1086】 模板水过
You can Solve a Geometry Problem too Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/3 ...
- protected 学习
virtual是把一个方法声明为虚方法,使派生类可重写此方法,一般建立的方法是不能够重写的,譬如类A中有个方法protected void method(){ 原代码....;}类B继承自类A,类B能 ...