聪明文档网

聪明文档网

最新最全的文档下载
当前位置: 首页> 反射机制

反射机制

时间:2023-09-16 01:06:26    下载该word文档
3.12、反射机制(理解,基本上本人不太奢求你们会)反射机制如果只是针对于普通开发者而言,意义不大,一般都是作为一些系统的架构设计去使用的,包括以后学习的开源框架,那么几乎都反射机制。3.12.1、认识反射(可以不会的重点反射之中包含了一个“反”的概念,所以要想解释反射就必须先从“正”开始解释,一般而言,当用户使用一个类的时候,应该先知道这个类,而后通过这个类产生实例化对象,但是“反”指的是通过对象找到类。packagecn.mldn.demo;classPerson{}publicclassTestDemo{publicstaticvoidmain(String[]argsthrowsException{Personper=newPerson(;//正着操作System.out.println(per.getClass(.getName(;//反着来}}以上的代码使用了一个getClass(方法,而后就可以得到对象所在的“包.类”名称,这就属于“反”了,但是在这个“反”的操作之中有一个getClass(就作为发起一切反射操作的开端。Person的父类是Object类,而上面所使用getClass(方法就是Object类之中所定义的方法。·取得Class对象:publicfinalClassgetClass(反射之中的所有泛型都定义为?,返回值都Object而这个getClass(方法返回的对象是Class类的对象,所以这个Class就是所有反射操作的源头。但是在讲解其真正使用之前还有一个需要先解释的问题,既然Class是所有反射操作的源头,那么这个类肯定是最为重要的,而如果要想取得这个类的实例化对象,Java中定义了三种方式:方式一:通过Object类的getClass(方法取得,基本不用:packagecn.mldn.demo;classPerson{}publicclassTestDemo{publicstaticvoidmain(String[]argsthrowsException{Personper=newPerson(;//正着操作Classcls=per.getClass(;//取得Class对象System.out.println(cls.getName(;//反着来}}方式二:使用“类.class”取得,在日后学习Hibernate开发的时候使用packagecn.mldn.demo;classPerson{}publicclassTestDemo{publicstaticvoidmain(String[]argsthrowsException{Classcls=Person.class;//取得Class对象
System.out.println(cls.getName(;//反着来}}方式三:使用Class类内部定义的一个static方法,主要使用·取得Class类对象:publicstaticClass<?>forName(StringclassNamethrowsClassNotFoundExceptionpackagecn.mldn.demo;classPerson{}publicclassTestDemo{publicstaticvoidmain(String[]argsthrowsException{Classcls=Class.forName("cn.mldn.demo.Person";//取得Class对象System.out.println(cls.getName(;//反着来}}那么现在一个新的问题又来了,取得了Class类的对象有什么用处呢?对于对象的实例化操作之前一直依靠构造方法和关键字new完成,可是有了Class类对象之后,现在又提供了另外一种对象的实例化方法:·publicTnewInstance(throwsInstantiationException,IllegalAccessException范例:通过反射实例化对象packagecn.mldn.demo;classPerson{@OverridepublicStringtoString({return"PersonClassInstance.";}}publicclassTestDemo{publicstaticvoidmain(String[]argsthrowsException{Classcls=Class.forName("cn.mldn.demo.Person";//取得Class对象Objectobj=cls.newInstance(;//实例化对象,和使用关键字new一样Personper=(Personobj;//向下转型System.out.println(per;}}那么现在可以发现,对于对象的实例化操作,除了使用关键字new之外又多了一个反射机制操作,而且这个操作要比之前使用的new复杂一些,可是有什么用?对于程序的开发模式之前一直强调:尽量减少耦合,而减少耦合的最好做法是使用接口,但是就算使用了接口也逃不出关键字new,所以实际上new是造成耦合的关键元凶。范例:回顾一下之前所编写的工厂设计模式packagecn.mldn.demo;interfaceFruit{publicvoideat(;

免费下载 Word文档免费下载: 反射机制

  • 29.8

    ¥45 每天只需1.0元
    1个月 推荐
  • 9.9

    ¥15
    1天
  • 59.8

    ¥90
    3个月

选择支付方式

  • 微信付款
郑重提醒:支付后,系统自动为您完成注册

请使用微信扫码支付(元)

订单号:
支付后,系统自动为您完成注册
遇到问题请联系 在线客服

常用手机号:
用于找回密码
图片验证码:
看不清?点击更换
短信验证码:
新密码:
 
绑定后可用手机号登录
请不要关闭本页面,支付完成后请点击【支付完成】按钮
遇到问题请联系 在线客服