学习java反射技术的_第1页
学习java反射技术的_第2页
学习java反射技术的_第3页
学习java反射技术的_第4页
学习java反射技术的_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Powerpoint TemplatesJAVA的反射机制课程目标了解什么是反射(反射机制)。了解reflect(API)。学会如何使用反射调取类的方法及属性。动态(或准动态)语言动态语言:大致认同的一个定义是:“程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言”。从这个观点看,Perl,Python,Ruby是动态语言var a=1;a=“aaaa”;a=false;请问:JAVA是动态语言吗?C+,Java,C#不是动态语言反射(Reflection)机制:在Java运行时环境中,对于任意一个类,能否知道这个类有哪些属性和方法?对于任意一个对象,能否调用它的任意一个方法?答案是

2、肯定的。这种动态获取类的信息以及动态调用对象的方法的功能来自于Java 语言的反射(Reflection)机制。什么是反射在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象; 在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;Java Java 反射机制主要提供了以下功能Java 语言的反射机制Java虽然不是动态语言,它却有着一个非常突出的动态相关机制:Reflection。Reflection的意思是“倒影、反射、映象”,用在Java上指的是我们可以于运行时加载、探知、使用编译期间完全未知的classes。Java程序可以加载一个运行时才得知名称的c

3、lass,获悉其完整构造(但不包括methods定义),并生成其对象实体、或对其fields设值、或唤起其methods。这种“看透class”的能力(the ability of the program to examine itself)被称为introspection(内省、内观、反省)。Reflection和introspection是常被并提的两个术语在JDK中,主要由以下类来实现Java反射机制,这些类都位于java.lang.reflect包中。Class类:代表一个类。Field类:代表类的成员变量(成员变量也称为类的属性)。Method类:代表类的方法。Constructor

4、类:代表类的构造方法。Array类:提供了动态创建数组,以及访问数组元素的静态方法。Java Reflection API 简介Class类在java.lang.Object 类中定义了getClass()方法,因此对于任意一个Java对象,都可以通过此方法获得对象的类型。Class类是Reflection API 中的核心类,它有以下方法getName():获得类的完整名字。getFields():获得类的public类型的属性。getDeclaredFields():获得类的所有属性。getMethods():获得类的public类型的方法。getDeclaredMethods():获得类

5、的所有方法。使用反射的条件要想使用反射,首先需要获得待处理类或对象所对应的Class 对象。获取某个类或某个对象所对应的Class对象的3种方式:/使用Class类的forname()静态方法Class.forName(“java.lang.String”);/使用类的class语法String.class;/使用对象的 getClass()方法String s=“aa”;Class clazz=s.getClass();读取命令行参数指定的类名,然后打印这个类具有的方法信息。public static void main(String args) throws ClassNotFoundEx

6、ception Class classType = Class.forName(java.lang.String);Method methods = classType.getDeclaredMethods();for (int i = 0; i methods.length; i+) System.out.println(methodsi); 反射构造方法若想通过类的不带参数的构造方法来生对象,我们有两种方式:先获得Class 对象,然后通过该Class 对象的 newInstance()方法直接生成即可: Class classType=String.class; Object obj=c

7、lassType.newInstance();先获得Class 对象,然后通过该对象获得对应的Constructor对象,再通过该Constructor对象的newInstance()方法生成:Class classType=Customer.class;Constructor cons=classType.getConstructor(new Class);Object obj=cons.newInstance(new Object);public class InvokeTest public int add(int a, int b) return a + b;public String

8、 echo(String name) return hello: + name;public static void main(String args) thorws Exception Class classType = InvokeTest.class;/ 实例化对象Object object = classType.newInstance();/ 得到需要的的加方法Method addMethod = classType.getMethod(add, new Class int.class,int.class );/ 調用些方法Object result = addMethod.invo

9、ke(object, new Object 1, 2 );System.out.println(result);/得到顯示的方法Method echoMethod=classType.getMethod(echo,new ClassString.class);/調用此方法Object showInfo=echoMethod.invoke(object, new Objecttom);System.out.println(showInfo);public class Private private String sayHello(String name) return Hello + name;

10、public static void main(String args) throws SecurityException,NoSuchMethodException, IllegalArgumentException,IllegalAccessException, InvocationTargetException Private p = new Private();Class classType = p.getClass();Method method = classType.getDeclaredMethod(sayHello,new Class String.class );metho

11、d.setAccessible(true);/方法为强制可访问String result = (String) method.invoke(p, new Object 张三 );System.out.println(result);利用反射机制访问私有方法利用反射机制拷贝对象利用反射机制把对象中的所有属性拷贝到新建的对象中,并将它返回。这个例子只能复制简单的JavaBean,假定JavaBean的每个属性都有 public类型的 getXXX()和setXXX()方法。用反射来重构抽象工厂中的工厂选择方法小结在java.lang.Object类中定义了getClass()方法,因此对于任意一个Java对象,都可以通过此方法获得对象的类型。Class类是Reflection API中的核心类,它有以下方法。 getName():获得类的完整名字。getFields():获得类的public类型的属性。getDeclaredFields():获得类的所有属性。getMethods():获得类的public类型的方法。getDeclaredMethods():获得类的所有方法。getMethod(String name, Class parameterTypes):获得类的特定方法,name参数指定方法的名字,parameterTypes参数指定方法的参数类型。getC

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论