- 1、本文档共22页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
反射(reflection)学习整理
反射学习整理
【摘要】
本文主要通过自己对反射机制的总结编写的文档,主要目的就是为了自己以后能可以参考温习也可以方便刚刚入门的同仁们学习指导,通过doc的编写相信可以在帮助别人的同时提高自己。
反射机制;
Reflection API;
如何使用反射机制;
反射机制的应用举例;
反射机制
什么是反射机制,说的通俗一些就是在java运行期间动态加载一些不确定的类对象,那么我们如何使用一个类的呢?当然大多数情况下我们是使用一个确定的类,然后通过在内存中的加载再使用之。
其实在一个project中会有很多类,虚拟机并不是在每一次运行时都将所有的类都进行加载然后解析的,是在我们使用的过程中才会被加载,这个大家可以看一下ClassLoader(在后期中我也会编写ClassLoader相关的文章总结)
反射机制提供的功能:
加载运行时才能确定的数据类型;
解析类的结构,获取其内部的信息;
能够操作的类型或者实例;
1. 访问属性;
2. 调用方法;
3. 创建新的对象;
以上的功能我会在接下来的文字中都进行阐述,然后每一个功能点都会通过代码的形式进行逐一的说明举例;
1.1动态加载类
Java虚拟机在运行是能加载的类型有如下几种:
类接口;
数组;
枚举;
注解(Annotation,可以参见我的另一篇文档,《java Annotation学习文档》);
基本数据类型;
在类加载的时候,JVM会自动加载上述类型对应的Class对象。
package com.wangwenjun.demo;
import java.util.ArrayList;
public class ReflectionDemo1 {
private final static String LIST_STRING=java.util.ArrayList; //动态加载java.util.ArrayList的类路径
@SuppressWarnings(unchecked)
public static void main(String[] args) {
try {
Class? clazz=Class.forName(LIST_STRING); //通过反射获取运行时的Class
ArrayListObject list=(ArrayListObject) clazz.newInstance(); //通过newInstance方法获取Object
list.add(hello);
System.out.println(list.size()+:+list.get(0));
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
执行结果为:1:hello
通过上面的代码我们可以总结出来使用Reflection大致需要如下的几步:
获取目标对象的Class对象;
调用Class对象内省方法获取目标对类成员信息;
访问目标类的成员属性;
1.2解析类的结构
通过第一步的操作,我们获取了目标对象的class之后就可以解析出来class对应的内部结构;别不多说直接上代码,来看看如何解析出来目标对象;
我们定义一个Teacher类
package com.wangwenjun.demo;
public class Teacher {
private String username;
private int age;
private static int total;
public Teacher(){
super();
total++;
}
public Teacher(String username,int age){
super();
this.username = username;
this.age = age;
total++;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
文档评论(0)