cehkongfuJava反射笔记.docVIP

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Java反射 1、反射的基石?Class类 1.1Java程序中的各个Java类属于同一类事物,描述这类事物的Java类名就是Class。 1.2对比提问,众多的人用一个Person类表示,众多的类用什么表示? 人?Person Java类?Class 1.3对比提问:Person类代表人,它的实例对象就是张三,李四这样一个个具体的人,Class类代表Java类,它的各个实例对象又分别表示什么呢? 对应各个类在内存中的字节码,例如,Person类的字节码,ArrayList类的字节码,等等... 一个类被类加载器加载到内存中,占用一片存储空间,这个空间里面的内容就是类的字节码,不同的类的字节码是不同的,所以他们在内存中的内容是不同的,这一个个的空间可以分别用一个个的对象来表示,这些对象显然具有相同的类型,那么这个类型又是什么呢? 1.4得到类字节码实例对象(Class类型)的三种方法 类名.class Eg:System.class 对象.getClass() Eg:new Data().getClass() Class.forName(“类名”) Eg:Class.forName(“java.util.Date”); 1.5九个预定义Class实例对象: 有九种预定义的 Class 对象,表示八个基本类型和 void。这些类对象由 Java 虚拟机创建,与其表示的基本类型同名,即 boolean、byte、char、short、int、long、float 和 double。Constructor[] constructors = Class.forName(java.lang.String).getConstructors(); 3.3得到某一个构造方法: Eg:Constructor constructor = Class.forName(java.lang.String).getConstructor(StringBuffer.class); 3.4创建实例对象: 常规方式:String str = new String(“abc”); 反射方式:String str = (String)constructor.newInstance(new StringBuffer(“abc”)); 3.5Class.newInstance()方法 Eg: String str = (String)Class.forName(java.lang.String).newInstance(); 该方法内部先得到默认的构造方法,然后用该方法创建实例对象。 该方法的内部代码用到了缓存机制来保存默认构造方法的实例对象。 4 Field类 4.1Field类代表某一个类中的一个成员变量 4.2演示代码 public class ReflectPoint { private int x; public int y; public ReflectPoint(int x, int y) { super(); this.x = x; this.y = y; } } ReflectPoint p1 = new ReflectPoint(3,5); Field fieldY = p1.getClass().getField(y); //fieldY的值是多少?是5?错!fieldY不是对象身上的变量,而是类上,要用它 //去取 某个对象上对应的值。 System.out.println( fieldY.get(p1) ); Field fieldX = p1.getClass().getDeclaredField(x); //暴力反射 fieldX.setAccessible(true); System.out.println( fieldX.get(p1) );Field fieldX = p1.getClass().getField(x); Exception in thread main java.lang.NoSuchFieldException: x at java.lang.Class.getField(Class.java:1520) at my.ceh.reflect.ReflectTest.main(ReflectTest.java:12) 不加 fieldX.setAccessible(true); 这行代码 5 Exception in thread main java.lang.IllegalAccessException: Class my.ceh.reflect.ReflectTest can not a

文档评论(0)

185****7617 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档