黑马程序员_反射
来源:互联网 发布:网络水晶头什么牌子好 编辑:程序博客网 时间:2024/06/06 05:08
何为反射,我的理解就是把一个类的各种成分,比如成员变量,方法,构造方法都映射成一个Java类,以便在程序运行的时候,对于任意的一个类,都知道其属性和信息,对于一个对象,可以调用使用其方法。
// 创建一个Class对象的三种方法 内存中字节码文件只存在一份
1. String.class
2. new String().getClass //知道对象的情况下
3. Class,forName("java.lang.String") //提供一个类名字符串
构造方法的反射
根据Class对象获得构造方法的对象
Constructor constructor = Class.forName("java.lang.String").getConstructor(); //调用无参数的构造方法
Constructor constructor = Class.forName("java.lang.String").getConstructor(StringBuffer.class);//调用带有参数的构造方法,传入的参数是参数类型的字节码
成员变量的反射
Field FLY = rp.getClass().getField("x");//FLY不是对象身上的变量,它是类字节码的变量,要用它去取某个对象对应的值
FLY.get(rp);//传入某个对象
暴力反射,取private变量
Field FLX = rp.getClass().getDeclaredField("x");
FLX.setAccessible(true);//安全检查
FLX.get(rp);
成员方法的反射
String str = "nba";
Method method = String.class.getMethod(charAt,int.class);//传入方法名以及方法的参数类型字节码
char ch = method.invoke(string,2);//对象和参数值,如果方法是静态方法,该参数可以为null,因为静态方法不属于对象,如果方法的参数为数组,用Object[]来传递
System.out.print(ch); //返回a
重点:数组的反射
具有相同维数和类型的数组属于同一个Class对象
int [] a1 = new int[3];
int [] a2 = new int[]{1,3,4,6};
String [] a3 = new String []{"a","b',"c","d"};
结论: a1.getClass == a2.getClass() 返回true ,a1.getClass()==a3.getClass()返回false
基本类型的一维数组可以当做Object类型使用,不能当做Object[] 类型,非基本数据类型的一维数组,既可以当作Object使用,也可以当作Object[]使用.
Object obj = (Object)Class.forName("className").newInstance();
C
- 黑马程序员_反射
- 黑马程序员_反射
- 黑马程序员_反射
- 黑马程序员_反射
- 黑马程序员_反射
- 黑马程序员_反射
- 黑马程序员_反射
- 黑马程序员_反射
- 黑马程序员_反射
- 黑马程序员_反射
- 黑马程序员_反射
- 黑马程序员_反射
- 黑马程序员_反射
- 黑马程序员_反射
- 黑马程序员_反射
- 黑马程序员_反射
- 黑马程序员_反射
- 黑马程序员_反射
- 在线GUID生成器
- MFC中使用CImage显示缩略图的方法
- 【CodeForces】266E More Queries to Array... 线段树
- 对象池 的设计和应用
- ios7 tableviewcell上面有button,但是button的点击效果没有
- 黑马程序员_反射
- IOS沙盒详解
- 黑马——C语言的一些基础(1)
- iOS中获取用户所点击的位置信息,并通过这个位置信息得到tableView的中的cell的indexPath.section
- Android隐式启动Activity
- Picture Aspect Ratio
- Qt移动应用开发(五):场景切换
- 贴片电阻阻值代码对照表
- NPOJ 1086 奇怪包包