谈谈java 反射机制48687

谈谈java 反射机制48687

ID:6772849

大小:30.50 KB

页数:6页

时间:2018-01-25

谈谈java 反射机制48687_第1页
谈谈java 反射机制48687_第2页
谈谈java 反射机制48687_第3页
谈谈java 反射机制48687_第4页
谈谈java 反射机制48687_第5页
资源描述:

《谈谈java 反射机制48687》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、谈谈java反射机制48687谈谈java反射机制.txt38当乌云布满天空时,悲观的人看到的是“黑云压城城欲摧”,乐观的人看到的是“甲光向日金鳞开”。无论处在什么厄运中,只要保持乐观的心态,总能找到这样奇特的草莓。Personp=newPerson();这是什么?当然是实例化一个对象了.可是这种实例化对象的方法存在一个问题,那就是必须要知道类名才可以实例化它的对象,这样我们在应用方面就会受到限制.那么有没有这样一种方式,让我们不知道这个类的类名就可以实例化它的对象呢?ThankGoodness!幸亏

2、我们用的是java,java就提供了这样的机制.1).java程序在运行时可以获得任何一个类的字节码信息,包括类的修饰符(public,static等),基类(超类,父类),实现的接口,字段和方法等信息.2).java程序在运行时可以根据字节码信息来创建该类的实例对象,改变对象的字段内容和调用对象方法.这样的机制就叫反射技术.可以想象光学中的反射,就像我们照镜子,镜子中又出现一个自己(比喻可能不太恰当,但是足以表达清楚意思了).反射技术提供了一种通用的动态连接程序组件的方法,不必要把程序所需要的目标类

3、硬编码到源程序中,从而使得我们可以创建灵活的程序.Java的反射机制是通过反射API来实现的,它允许程序在运行过程中取得任何一个已知名称的类的内部信息.反射API位于java.lang.reflect包中.主要包括以下几类:1).Constructor类:用来描述一个类的构造方法2).Field类:用来描述一个类的成员变量3).Method类:用来描述一个类的方法.4).Modifer类:用来描述类内各元素的修饰符5).Array:用来对数组进行操作.Constructor,Field,Method这

4、三个类都是JVM(虚拟机)在程序运行时创建的,用来表示加载类中相应的成员.这三个类都实现了java.lang.reflect.Member接口,Member接口定义了获取类成员或构造方法等信息的方法.要使用这些反射API,必须先得到要操作的对象或类的Class类的实例.通过调用Class类的newInstance方法(只能调用类的默认构造方法)可以创建类的实例.这样有局限性,我们可以先冲类的Class实例获取类需要的构造方法,然后在利用反射来创建类的一个实例.一.获取类的构造方法的Constructo

5、r对象(数组)●Constructor[]getDeclaredConstructors();返回已加载类声明的所有的构造方法的Constructor对象数组.●ConstructorgetDeclaredConstructor(Class[]paramTypes);返回已加载类声明的指定构造方法的Constructor对象,paramTypes指定了参数类型.●Constructor[]getConstructors();返回已加载类声明的所有的public类型的构造方法的Constructor对象

6、数组.●ConstructorgetConstructor(Class[]paramTypes);返回已加载类声明的指定的public类型的构造方法的Constructor对象,paramTypes指定了参数类型.如果某个类中没有定义构造方法,第一个和第三个方法返回的数组中只有一个元素,就是缺省的构造方法;如果某个类中只定义了有参数的构造函数,而没有定义缺省构造函数,第一个和第三个方法返回的数组中不包含缺省的构造方法.例子:importjava.lang.reflect.*;publicclassDu

7、mpMethods{publicstaticvoidmain(String[]args){try{if(args.length<1){System.out.println("请输入完整的类名:");return;}ClassstrClass=Class.forName(args[0]);//检索带有指定参数的构造方法Class[]strArgsClass=newClass[]{byte[].class,String.class};Constructorconstructor=strClass.getC

8、onstructor(strArgsClass);System.out.println("Constructor:"+constructor.toString());//调用带有参数的构造方法创建实例对象objectbyte[]bytes="java就业培训".getBytes();Object[]strArgs=newObject[]{bytes,"gb2312"};Objectobject=constructor.newInstance(strArg

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

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

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