java反射与类加载器.docx

java反射与类加载器.docx

ID:59254691

大小:647.83 KB

页数:12页

时间:2020-09-08

java反射与类加载器.docx_第1页
java反射与类加载器.docx_第2页
java反射与类加载器.docx_第3页
java反射与类加载器.docx_第4页
java反射与类加载器.docx_第5页
资源描述:

《java反射与类加载器.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、反射class:定义Java类时的关键字.Class:Java程序中的各个Java类,它们是否属于同一类事物,是不是可以用一个类来描述这类事物呢?这个类的名字就是Class.有9个预定义的Class对象:8个基本类型+void.class.这8种基本类型分别是:boolean,char,byte,short,int,long,float,double.数组类型的Class实例对象:Class.isArray.总之,只要是在源程序中出现的类型,都有各自的Class实例对象,例如int[],void...Class.forName作用:返回字节码;返回方式1:这份字节码曾经被加载

2、过,已经在java虚拟机中了,直接返回;返回方式2:java虚拟机中还没有这份字节码,用类加载器去加载,把加载进来的字节码缓存在虚拟机中,以后要得到这份字节码就不用加载了.反射就是把Java类中的各种成分映射成相应的Java类.例如,一个Java类用一个Class类的对象来表示,一个类中的组成部分:成员变量、方法、构造方法、包等等信息也用一个个的Java类来表示,就像汽车是一个类,汽车中的发动机、变速箱等等也是一个个的类。表示java类的Class类显然要提供一系列的方法,来获得其中的变量,方法,构造方法,修饰符,包等信息,这些信息就是用相应类的实例对象来表示,他们是Fiel

3、d、Method、Contructor、Package等等。一个类中的每个成员都可以用相应的反射API类的一个实例对象来表示,通过调用Class类的方法可以得到这些实例对象后,得到这些实例对象后又什么用呢?怎么用呢?这正是学习和应用反射的要点。Constructor类代表某个类中的一个构造方法。1.得到某个类所有的构造方法:Constructor[]constructors=Class.forName("java.lang.String").getConstructors();2.得到某一个构造方法:Constructorconstructor=Class.forName("

4、java.lang.String").getConstructor(StringBuffer.class);//获得构造方法时要用到类型3.创建实例对象:通常方式:Stringstr=newString(newStringBuffer("abc"));反射方式:Stringstr2=(String)constructor.newInstance(newStringBuffer("abc"));//调用获得的方法时要用到上面相同类型的实例对象4.Class.newInstance()方法:Stringobj=Class.forName("java.lang.String").n

5、ewInstance();该方法内部先得到默认的构造方法,然后用该构造方法创建实例对象。该方法内部的具体是怎样的呢?用到了缓存机制来保存默认构造方法的实例对象。反射会导致程序性能下降。Field代表成员变量。Method类代表某个类中的一个成员方法。//专家模式1.得到类中的某一个方法:MethodcharAt=Class.forName("java.lang.String").getMethod("charAt",int.class);2.调用方法:通常方式:System.out.println(str.charAt(1));反射方式:System.out.println(

6、charAt.invoke(str,1));3.jdk1.4和Jdk1.5的区别:jdk1.5:publicObjectinvoke(Objectobj,Object...args);jdk1.4:publicObjectinvoke(Objectobj,Object[]args),即按jdk1.4的语法,需要将一个数组作为参数传递给invoke方法时,数组中的每个元素分别对应被调用方法中的一个参数,所以,调用charAt方法的代码也可以用jdk1.4改写为:charAt.invoke("str",newObject[]{1})形式.数组的反射:具有相同维度和元素类型的数组属

7、于同一个类型,即具有相同的Class实例对象.代表数组的Class实例对象的getSuperclass()返回父类Object类对应的Class.基本类型的一维数组可以被当作Object类型使用,不能当作Object[]类型使用;非基本类型的一维数组既可以被当作Object类型使用,也可以当作Object[]类型使用。Arrays.asList()方法处理int[]与String[]时的差异,见ReflectTest中的示例代码.java.lang.reflect.Array工具类用于完成对数组的反射操

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。