黑马程序员——反射
来源:互联网 发布:c语言速成手册 编辑:程序博客网 时间:2024/05/28 15:18
11.1. 反射的概念
反射就是在运行状态把Java类中的各种成分映射成相应的Java类,可以动态得获取所有的属性以及动态调用任意一个方法。
反射的基石----Class类,类名,代表一类事物。
返回的对象用类表示,返回的方法用类表示,返回的成员变量用类表示。反射,就是把java中的各个成分映射成相应的java类表示
11.2. 反射——构造方法
Class clazz = 类名.class;
Constuctor con = clazz.getConstructor(newClass[]{paramClazz1,paramClazz2,.....});
con.newInstance(params....);
11.3. 反射——成员方法
Method m=clazz.getMethod(methodName,newClass[]{paramClazz1,paramClazz2,.....});
m.invoke();
11.4. 反射——属性
Field field = clazz.getField(fieldName);
field.setAccessible(true);//设置为可访问
filed.setObject(value); //设置值
Object value = field.get(clazz); //获得值
Object staticValue = filed.get(Class); //获得静态值
11.5 例子:‘b’改成‘a’
<span style="white-space:pre"></span>changeStringValue(pt1);field.getType().equals(String.class);//用等号比,因为比的是字节码if(field.getType()==String.class){<span style="white-space:pre"></span>String newValueokdValue.replace('b','a');<span style="white-space:pre"></span>field.set(obj,newValue);, }
11.7. 应用
用于reflection的类,如Method,可以在java.lang.relfect包中找到。使用这些类的时候必须要遵循三个步骤:
第一步是获得你想操作的类的java.lang.Class对象。在运行中的Java程序中,用java.lang.Class类来描述类和接口等
第二步是调用诸如getDeclaredMethods的方法,以取得该类中定义的所有方法的列表。
第三步——使用reflectionAPI来操作这些信息
例子:
package reflect; importjava.util.ArrayList;importjava.util.Collection;importjava.util.HashSet; public classReflectDemo {public static voidmain(String[] args){Collectioncollections=new HashSet();ReflectPointpt1=new ReflectPoint(3,3);ReflectPointpt2=new ReflectPoint(5,5);ReflectPointpt3=new ReflectPoint(3,3);collections.add(pt1);collections.add(pt2);collections.add(pt3);collections.add(pt1);System.out.println(collections.size());}}
11.8. 知识点归纳
1.九个预定义类
八个基本的数据类型分别对应八个Class对象
void也有对应的class对象 Class cls1=void.class;
所以有九个基本的预定义的class对象
Method类
方法与对象没有关系
调用某个对象上的方法
用反射怎样调用Strng上的charAt()方法
MethodmethodCharAt=String.class.getMethod("charAt",int.class);
methodCharAt.invoke(str1,1);
2.用反射产生对象
String str3=(String)constructor1.newInstance(new StirngBuffer("abc"));用构造方法产生对象
Stringstr2=(String)constructor.newInstance(new StringBuffer("abc"));
System.out.println(str2.charAt(2));
Class.newInstance();
class--constructor---newobject
反射会导致性能下降
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------详细请查看:www.itheima.com- 黑马程序员—反射
- 黑马程序员—反射
- 黑马程序员—反射
- 黑马程序员—反射
- 黑马程序员—反射
- 黑马程序员—反射
- 黑马程序员—反射
- 黑马程序员—反射
- 黑马程序员——反射
- 黑马程序员——反射
- 黑马程序员——反射
- 黑马程序员——反射
- 黑马程序员——反射
- 黑马程序员——反射
- 黑马程序员——反射
- 黑马程序员——反射
- 黑马程序员——反射
- 黑马程序员——反射
- JAVA排序
- Cash Machine poj1276
- 设计模式学习笔记之观察者模式
- 重新思考工作
- An Introduction to Bioinformatics Algorithms - II - page79 -114
- 黑马程序员——反射
- LeetCode | Single Number II
- c++ 获取随机数
- Android学习社区
- 【LeetCode】Unique Binary Search Trees
- poj 1606 Jugs(广搜BFS+路径输出)
- win7 64bits 设置ODBC遇到的一些问题 “未发现数据源…” “驱动程序和应用程序之间体系结构不匹配……”
- js的Prototype属性 解释及常用方法
- sqlalchemy整理(一)