A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 飘影 中级黑马   /  2015-7-22 21:58  /  980 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载。连接,初始化三步来实现对这个类的初始化
加载:
就是指将class文件读入内存,并为之创建一个Class对象
任何类被使用时系统将会建立一个Class对象。
连接
验证   是否有正确的内部结构,并和其他类协调一致
准备  负责为类的静态成员分配内存,并设置默认初始化值
解析  将类的二进制数据中的符号引用替换为直接引用

初始化  就是讲过的初始化
反射:就是通过class文件对象,去使用该类中的成员变量,构造方法,成员方法,
Class类
成员变量    Filed
构造方法    Constructor
Method
获取class文件对象的方式
Object类中的getClass()方法,几个不同类获得的class对象是同一个对象
数据类型的静态属性class         String.Class
Class类中的静态方法:  Class forName(string classname)    参数是带包名的全路径
例如:Class c=Class.forName("cn.itcast_01.Person");参数可以再外面写,有提示,然后再粘贴过去
或者在Explorer下java文件下的类名上右键选copy  Qualified name
使用哪种方法呢?
自己玩        任选一种,第二种Class c=Persion.class;方便
开发:        第三种
因为第三种是一个字符串,而不是一个具体的类名,这样我们就可以把这样的字符串配置到配置文件中,
用反射获取构造方法并使用。
getConstructors()  获得公共的构造方法。返回的是COnstructor[]
getDeclaredConstructors()    获得所有的额构造方法
getConstructor(...)    获得一个构造方法。参数标识的是:你要火取的构造方法的构造参数个数及数据类型的class字节码文件对象。Constructor con=c.getConstructor();   返回的是购房方法对象
Object NewInstance(object ...)   使用constructor对象所表示的构造方法来创建改构造方法的声明类的新势力。并用指定的初始化参数初始化该实例
方法总结:以下abc相当于实现一个   Person p=new Person("林青霞",27,"北京");语句。
Class c=Class.forName("cn.itcast_01.Person");      获得Class对象,字符串可以用配置文件任意指定,
Constructor con=c.getConstructor(String.class,int.class,String.class);         获得他的构造方法,这里的是三个参数的。
Object o=con.NewInstance("林青霞",27,"北京");        初始化一个对象。
如果一个构造是private的需要在第二步骤改:
Constructor con=c.getDeclaredConstructor(String.class,int.class,String.class);  
然后再用con.setAccessible(true);取消检查修饰限制,这个是暴力访问private构造。
获取成员变量:的第二步开始
c.getFields()获取公共的,    Field[] f=c.getDealaredField()获取所有的。
获取单个的是Field f=c.getFiled("adress");      adress是例子persion类的地址。   
Field里的set(object,object)  将制定对象变量上此Filed对象表示的字段设置为指定的新值
例如    f.set(obj,"北京")    obj是反射回来的对象,意思是将obj对象的f字段设置为北京。

获取所有方法
getMethods();                getDeclaredMethods()得到所有的方法
getMethod()得到一个方法 ,包括父类的方法            getDeclaredMethod()得到private的方法,不包括父类的方法。
method.setAccessible(true)

4 个回复

倒序浏览
总结的很好
回复 使用道具 举报
方法差不多全了
回复 使用道具 举报
谢谢分享
回复 使用道具 举报
总结的很好,赞一个,暂时看得不太懂
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马