java基础—反射
编程Thinker
专注于软件开发,文章以实际经验总结而成...
展开
-
反射(1)--类加载器
类加载器 类的加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化。 n 加载 就是指将class文件读入内存,并为之创建一个Class对象。 任何类被使用时系统都会建立一个Class对象。 n 连接 验证:是否有正确的内部结构,并和其他类协调一致 准备:负责为类的静态成员分配内存,并设置默认初始化值 解析:将类原创 2017-02-23 21:52:49 · 221 阅读 · 0 评论 -
反射(2)--Class类
反射 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象. 反射:就是通过class文件原创 2017-02-23 22:01:52 · 275 阅读 · 0 评论 -
反射(3)--Constructor类(构造器)
获取Constructor类(构造器) 通过Class类的以下方法,我们可以获得构造器。 l publicConstructor[] getConstructors():所有公共构造方法 l publicConstructor[] getDeclaredConstructors():所有构造方法 l publicConstructor getConstructor(原创 2017-02-23 22:04:05 · 912 阅读 · 0 评论 -
反射(4)--Field类
获取Field类 通过Class类的以下方法,我们可以获得构造器。 l public Field [] getFields ():所有公共成员变量 l public Field [] getDeclaredFields():所有成员变量 l public FieldgetField(String name):获取单个公共成员变量,name 参数是一个 Strin原创 2017-02-23 22:06:59 · 191 阅读 · 0 评论 -
反射(5)--Method类
获取Method类 通过Class类的以下方法,我们可以获得构造器。 l public Method [] getMethods ():获取自己的包括父亲的公共方法 l public Method [] getDeclaredMethods():获取自己的所有的方法 l public MethodgetMethod(String name,Class... para原创 2017-02-23 22:08:20 · 322 阅读 · 0 评论 -
反射(6)--动态代理
动态代理 • 代理:本来应该自己做的事情,却请了别人来做,被请的人就是代理对象。 • 举例:春季回家买票让人代买 • 动态代理:在程序运行过程中产生的这个对象 • 而程序运行过程中产生对象其实就是我们刚才反射讲解的内容,所以,动态代理其实就是通过反射来生成一个代理 创建动态代理 l 在Java中java.lang.reflect包下提供了一个Proxy类和一个原创 2017-02-23 22:11:28 · 241 阅读 · 0 评论 -
反射示例1:通过配置文件运行类中的方法
例1:通过配置文件运行类中的方法 // 加载键值对数据 Properties prop = new Properties(); FileReader fr = new FileReader("class.txt"); prop.load(fr); fr.close(); // 获取数据 Stri原创 2017-02-23 22:15:14 · 413 阅读 · 0 评论 -
反射示例2:在ArrayList<Integer>集合中添加一个字符串数据
例2:在ArrayList集合中添加一个字符串数据 // 创建集合对象 ArrayList array = new ArrayList(); Class c = array.getClass(); // 集合ArrayList的class文件对象 Method m = c.getMethod("add", Object.class);原创 2017-02-23 22:16:29 · 921 阅读 · 0 评论 -
反射示例3:写一个方法设置对象任意权限的属性的值
例3:写一个方法设置对象任意权限的属性的值 写一个方法:public void setProperty(Objectobj, String propertyName, Object value){}, 此方法可将obj对象中名为propertyName的属性的值设置为value。(这里不知道obj对象的propertyName属性的权限,如果为private,则必须使用反射才能设置,所有才有了原创 2017-02-23 22:21:16 · 1219 阅读 · 0 评论