第十三章反射(reflect)、类加载与垃圾回收总结
2016-05-08 18:55
295 查看
重点掌握:1.通过反射产生对象 2.通过反射探究一个类,探究它的构造,属性和方法 3.在运行期探究类的任意构造方法属性。体会它的动态性。
1.类加载:由类加载器完成,把这个类的信息放入Class文件当中。
加载机制:加载---连接(验证--准备--解析)---初始化
2.反射
在运行期探究和使用编译器未知的类,包括类,属性,方法等。
反射使用步骤:第一步:获取Class对象,第二步通过Class对象探究一个类的信息。第三步,操作从Class对象中的探究出的信息。
第一步:获取Class对象 又分三种获取
1,根据实例对象获取Class对象。
实现方法,调用实例对象的getClass();该方法来自Object类。动态性:无
Student stu = new Student(); Class stuClass0 = stu.getClass(); Class strClass0 = “hello”。getClass; int[] intArray = new int [6]; Class arrayClass0 = intArray .getClass();
2,根据类型名获取Class对象)
实现方法:调用类型名.class
使用范围:所有的类型(基本,引用,甚至包括void) 动态性:无
Class stuClass1 = Student.class; Class strClass1 = String .class; Class arrayClass1 = int[].class; Class intClass = int .class;//获取int的Class对象该方法在JDK1.5以后才有 Class integerClass = integer.class//获取包装类Intrger的Class对象 Class intClass1 = Integer.TYPE;//获取int的Class对象该方法在JDK1.5之前 Class voidClass = void .class; System 。out.print(stuClass0==stuClass1);//不管用那种方式获取,一个类型只有一个Class对象
3,根据类型的字符串名称获取Class对象。)(用的最多的一种)**********
实现方式:调用Class.forName(“类的限定名”)
适用范围:只有类类型(包括接口) 动态性:有
Class stuClass2 = null; StuClass2 = Class.forNmae ("zuoye.shuangseqiu") 系统会打印出try catch。
英语单词:属性(Field) ---构造(Constructor)---行为方法(Method)---被申明的(Declared)***************
获取Class对象中的信息
根据反射探究到的信息进行操作2
根据Constructor对象,产生实例对象。
实现一:调用Constructor对象的newInstance方法。
Con
实现二:直接调用Class对象的NewInstance方法,前提是只能调用到公共无参构造****************
Student stu0 = (Student)stuClass2.newInstance();
根据Field对象,对属性进行取值和赋值 ---实现:调用Field的get ,set 方法
4000
************
Field thePublicField = stuClass2.getField("score"); thePublicField.set(stu,100);//赋值(注意第一个参数,代表给那个Student对象的这个属性取值) System.out.print(thePublicField.get(stu));//取值(参数代表从那个Student对象的这个属性赋值))
根据Method对象,对方法进行调用--实现:调用Method对象的invoke方法*****************
Method thepublicMethod = stuClass2.getMethod("test1"); thePublicMethod.invoke(stu);
相关文章推荐
- maven整合tomcat
- Qt信号和槽
- UVA 1584 - Circular Sequence(环状序列)(字典序)
- 第十周学习进度条
- vs2013配置opencv2.4.8
- Java的Atomic类分析
- 大数据环境下互联网行业数据仓库/数据平台的架构之漫谈
- Linux应用程序访问字符设备驱动详细过程解析
- 正则表达式入门
- 浅谈开源大数据平台的演变
- 第十一周技术博客
- java集合框架
- 【LeetCode】Factorial Trailing Zeroes 解题报告
- awk参数处理
- 20145211 《Java程序设计》第10周学习总结——昨夜星辰昨夜风
- 解读某OAuth 2.0的开源示例android-oauth-app
- 线程同步(三)—— 信号量
- poj之旅——3669
- Git 基础(七)—— 远程仓库(GitHub)
- Rxjava入门与使用