- 1、本文档共7页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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
您可能关注的文档
- CAD常用快捷键设置.doc
- CAD常用的几个命令.doc
- CAD常用的绘图快捷命令.doc
- CAD常见的快捷命令.doc
- CAD应用之高效制图.docx
- CAD建筑平面图绘图步骤.doc
- CAD建筑绘图家具规范尺寸.doc
- cad快捷指令MicrosoftWord文档.doc
- CAD快捷简单的使用0204050607080910兼容.doc
- CAD快捷计算面积的几种方法.doc
- 人教版九年级英语全一册单元速记•巧练Unit13【速记清单】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit9【速记清单】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit11【速记清单】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit14【单元测试·提升卷】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit8【速记清单】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit4【单元测试·提升卷】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit13【单元测试·基础卷】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit7【速记清单】(原卷版+解析).docx
- 苏教版五年级上册数学分层作业设计 2.2 三角形的面积(附答案).docx
- 人教版九年级英语全一册单元速记•巧练Unit12【单元测试·基础卷】(原卷版+解析).docx
文档评论(0)