欢迎来到天天文库
浏览记录
ID:37858077
大小:100.00 KB
页数:9页
时间:2019-06-01
《JAVA反射机制详解》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、—高级软件人才实作培训专家!反射概述1 反射的概述1.1 什么是反射每个.class文件被加载到内存后都是一个Class类的对象!例如Demo.class加载到内存后它是Class类型的一个对象。反射就是通过Class对象获取类型相关的信息。一个Class对象就表示一个.class文件,可以通过Class对象获取这个类的构造器、方法,以及成员变量等。反射是Java的高级特性,在框架中大量被使用!我们必须要了解反射,不然无法学好JavaWeb相关的知识!1.2 反射相关类与反射相关的类:lClass:表示类;lField:表示成员变量
2、;lMethod:表示方法;lConstructor:表示构造器。与反射相关的类们,它们都不能new!!!2 Class类2.1 获取Class类获取Class类的三种l类名.classl对象.getClass()lClass.forName(“字符串:类名”)基本方式:l通过类名称.class,对基本类型也支持;ØClassc=int.class;北京传智播客教育www.itcast.cn—高级软件人才实作培训专家!ØClassc=int[].class;ØClassc=String.classl通过对象.getClass()方法ØClass
3、c=obj.getClass();lClass.forName()通过类名称加载类,这种方法只要有类名称就可以得到Class;ØClassc=Class.forName(“cn.itcast.Demo”);2.2 Class类的常用方法lStringgetName():获取类名称,包含包名;lStringgetSimpleName():获取类名称,不包含包名;lClassgetSupperClass():获取父类的Class,例如:newInteger(100).getClass().getSupperClass()返回的是Class4、er>!但newObject().getSupperClass()返回的是null,因为Object没有父类;lTnewInstance():使用本类无参构造器来创建本类对象;lbooleanisArray():是否为数组类型;lbooleanisAnnotation():是否为注解类型;lbooleanisAnnotationPresent(ClassannotationClass):当前类是否被annotationClass注解了;lbooleanisEnum():是否为枚举类型;lbooleanisInterface():是否为接口类型;5、lbooleanisPrimitive():是否为基本类型;lbooleanisSynthetic():是否为引用类型;2.3 通过反射创建对象publicclassDemo1{@Testpublicvoidfun1()throwsException{StringclassName="cn.itcast.User";Classclazz=Class.forName(className);Useruser=(User)clazz.newInstance();System.out.println(user);}}classUser{privateS6、tringusername;privateStringpassword;publicStringgetUsername(){returnusername;北京传智播客教育www.itcast.cn—高级软件人才实作培训专家!}publicvoidsetUsername(Stringusername){this.username=username;}publicStringgetPassword(){returnpassword;}publicvoidsetPassword(Stringpassword){this.password=passwo7、rd;}@OverridepublicStringtoString(){return"User[username="+username+",password="+password+"]";}}User[username=null,password=null]3 Constructor它是Class的一个组成部门,所以需要先得到Class,再通过Class的方法得到ConstructorConstructor表示一个类的构造器。即构造器的反射对象!3.1 获取Constructor对象 获取Construcator对象需要使用Class对象,下8、面API来自Class类:lConstructorgetConstructor(Class…parameterTypes):通过指定的参数类型获取公有
4、er>!但newObject().getSupperClass()返回的是null,因为Object没有父类;lTnewInstance():使用本类无参构造器来创建本类对象;lbooleanisArray():是否为数组类型;lbooleanisAnnotation():是否为注解类型;lbooleanisAnnotationPresent(ClassannotationClass):当前类是否被annotationClass注解了;lbooleanisEnum():是否为枚举类型;lbooleanisInterface():是否为接口类型;
5、lbooleanisPrimitive():是否为基本类型;lbooleanisSynthetic():是否为引用类型;2.3 通过反射创建对象publicclassDemo1{@Testpublicvoidfun1()throwsException{StringclassName="cn.itcast.User";Classclazz=Class.forName(className);Useruser=(User)clazz.newInstance();System.out.println(user);}}classUser{privateS
6、tringusername;privateStringpassword;publicStringgetUsername(){returnusername;北京传智播客教育www.itcast.cn—高级软件人才实作培训专家!}publicvoidsetUsername(Stringusername){this.username=username;}publicStringgetPassword(){returnpassword;}publicvoidsetPassword(Stringpassword){this.password=passwo
7、rd;}@OverridepublicStringtoString(){return"User[username="+username+",password="+password+"]";}}User[username=null,password=null]3 Constructor它是Class的一个组成部门,所以需要先得到Class,再通过Class的方法得到ConstructorConstructor表示一个类的构造器。即构造器的反射对象!3.1 获取Constructor对象 获取Construcator对象需要使用Class对象,下
8、面API来自Class类:lConstructorgetConstructor(Class…parameterTypes):通过指定的参数类型获取公有
此文档下载收益归作者所有