java反射机制详解

上传人:第*** 文档编号:34061234 上传时间:2018-02-20 格式:DOC 页数:9 大小:100KB
返回 下载 相关 举报
java反射机制详解_第1页
第1页 / 共9页
java反射机制详解_第2页
第2页 / 共9页
java反射机制详解_第3页
第3页 / 共9页
java反射机制详解_第4页
第4页 / 共9页
java反射机制详解_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《java反射机制详解》由会员分享,可在线阅读,更多相关《java反射机制详解(9页珍藏版)》请在金锄头文库上搜索。

1、Comment c1: 与反射相关的类们,它们都不能 new!Comment c2: 类名.class 对象.getClass() Class.forName(“字符串:类名”)北京传智播客教育 高级软件人才实作培训专家!反射概述1反射的概述1.1什么是反射每个.class 文件被加载到内存后都是一个 Class类的对象!例如 Demo.class加载到内存后它是Class类型的一个对象。反射就是通过 Class对象获取类型相关的信息。一个 Class对象就表示一个.class 文件,可以通过 Class对象获取这个类的构造器、方法,以及成员变量等。反射是 Java的高级特性,在框架中大量被使

2、用!我们必须要了解反射,不然无法学好 JavaWeb相关的知识!1.2反射相关类与反射相关的类: Class:表示类; Field:表示成员变量; Method:表示方法; Constructor:表示构造器。2Class 类2.1获取 Class类获取 Class类的三种基本方式: 通过类名称.class,对基本类型也支持; Class c = int.class;北京传智播客教育 高级软件人才实作培训专家! Class c = int.class; Class c = String.class 通过对象.getClass()方法 Class c = obj.getClass(); Clas

3、s.forName()通过类名称加载类,这种方法只要有类名称就可以得到 Class; Class c = Class.forName(“cn.itcast.Demo”);2.2Class 类的常用方法 String getName():获取类名称,包含包名; String getSimpleName():获取类名称,不包含包名; Class getSupperClass():获取父类的 Class,例如:new Integer(100).getClass().getSupperClass()返回的是 Class!但 new Object().getSupperClass()返回的是 null,

4、因为 Object 没有父类; T newInstance():使用本类无参构造器来创建本类对象; boolean isArray():是否为数组类型; boolean isAnnotation():是否为注解类型; boolean isAnnotationPresent(Class annotationClass):当前类是否被 annotationClass 注解了; boolean isEnum():是否为枚举类型; boolean isInterface():是否为接口类型; boolean isPrimitive():是否为基本类型; boolean isSynthetic():是否

5、为引用类型;2.3通过反射创建对象public class Demo1 Testpublic void fun1() throws Exception String className = cn.itcast.User;Class clazz = Class.forName(className); User user = (User)clazz.newInstance();System.out.println(user);class User private String username;private String password;public String getUsername()

6、return username;Comment c3: 它是 Class的一个组成部门,所以需要先得到 Class,再通过Class的方法得到 Constructor北京传智播客教育 高级软件人才实作培训专家!public void setUsername(String username) this.username = username;public String getPassword() return password;public void setPassword(String password) this.password = password;Overridepublic Stri

7、ng toString() return User username= + username + , password= + password + ;User username=null, password=null3ConstructorConstructor表示一个类的构造器。即构造器的反射对象!3.1获取 Constructor对象获取 Construcator对象需要使用 Class对象,下面 API来自 Class类: Constructor getConstructor(Class parameterTypes):通过指定的参数类型获取公有构造器反射对象; Constructor

8、getConstructors():获取所有公有构造器对象; Constructor getDeclaredConstructor(Class parameterTypes):通过指定参数类型获取构造器反射对象。可以是私有构造器对象; Constructor getDeclaredConstructors():获取所有构造器对象。包含私有构造器;3.2Construcator类常用方法 String getName():获取构造器名; Class getDeclaringClass():获取构造器所属的类型; Class getParameterTypes():获取构造器的所有参数的类型; C

9、lass getExceptionTypes():获取构造器上声明的所有异常类型;北京传智播客教育 高级软件人才实作培训专家! T newInstance(Object initargs):通过构造器反射对象调用构造器。3.3 练习:通过 Construcator 创建对象User.javapublic class User private String username;private String password;public User() public User(String username, String password) this.username = username;thi

10、s.password = password;public String getUsername() return username;public void setUsername(String username) this.username = username;public String getPassword() return password;public void setPassword(String password) this.password = password;Overridepublic String toString() return User username= + u

11、sername + , password= + password + ;Demo1.javapublic class Demo1 TestComment 崔4: 通过参数类型来获取构造器,即获取两个 String类型参数的构造器反射对象。Comment 崔5: 通过构造器反射对象来调用构造器,并传递参数给构造器北京传智播客教育 高级软件人才实作培训专家!public void fun1() throws Exception String className = cn.itcast.User;Class clazz = Class.forName(className);Constructor c

12、 = clazz.getConstructor(String.class, String.class);User user = (User)c.newInstance(zhangSan, 123);System.out.println(user);4Method(类的组成部分)Class 类的反射对象Constructor 构造器的反射对象Method表示方法的反射对象Field 成员的反射对象4.1获取 Method获取 Method需要通过 Class对象,下面是 Class类的 API: Method getMethod(String name, Class parameterTypes

13、):通过方法名和方法参数类型获取方法反射对象,包含父类中声明的公有方法,但不包含所有私有方法; Method getMethods():获取所有公有方法,包含父类中的公有方法,但不包含任何私有方法; Method getDeclaredMethod(String name, Class parameterTypes):通过方法名和方法参数类型获取本类中声明的方法的反射对象,包含本类中的私有方法,但不包含父类中的任何方法; Method getDeclaredMethods():获取本类中所有方法,包含本类中的私有方法,但不包含父类中的任何方法。4.2Method 常用方法 String get

14、Name():获取方法名; Class getDeclaringClass():获取方法所属的类型; Class getParameterTypes():获取方法的所有参数的类型; Class getExceptionTypes():获取方法上声明的所有异常类型; Class getReturnType():获取方法的返回值类型; Object invode(Object obj, Object args):通过方法反射对象调用方法,如果当前方法是实例方法,那么当前对象就是 obj,如果当前方法是 static方法,那么可以给 obj传递null。args 表示是方法的参数;Comment 崔

15、6: 获取名为 toString,没有参数的方法Comment 崔7: 反射调用这个方法,给 this赋值为 user,没有传递参数,因为这个方法没有参数。Comment 崔8: 打印返回值。北京传智播客教育 高级软件人才实作培训专家!4.3练习:通过 Method调用方法public class Demo1 Testpublic void fun1() throws Exception String className = cn.itcast.User;Class clazz = Class.forName(className);Constructor c = clazz.getConstructor(String.class, String.class);User user = (User)c.newInstance(zhangSan, 123);Method method = clazz.getMethod(toString);String result = (String)method.invoke(user);System.out.printl

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号