反射
来源:互联网 发布:windows gif 录制 编辑:程序博客网 时间:2024/05/29 16:39
类加载详解
反射详解
Class类
理解:用来描述java类这一类事物
获得Class对象
每个类被加载后,系统就会为该类生成一个对应的Class对象,通过Class类对象可以访问到JVM中的这个类。
得到字节码的三种方式:
1,Class cls1 =Person.class 调用类的class属性来获取对应的Class对象
2,Class cls2 =p1.getClass() 对象调用该方法获取Class对象
3,Class cls3 =Class.forName() Class类的静态方法
作用:返回字节码,JVM中有,直接返回,没有就加载类,然后缓存起来
程序清单:
反射:
就是把java类中的各种成分映射成相应的java类
例如:一个java类用一个Class的对象来表示,一个类中的组成部分:成员变量,方法,构造方法,包等等信息也用一个个java类来表示。Class类提供一系列方法来获得其中的变量,方法,构造方法,修饰符,包等信息。这些信息就是用相应的实例对象来表示,它们是Field,Method,Contructor,Package
Constructor类:
代表某个类中的一个构造方法
Field类:
代表某个类中的一个成员变量
类只有一个,而类的实例对象可以有多个,如果是与对象关联,那么关联的那个对象,就指向那个对象的对应的属性
如代码中的fieldX代表的是X的定义,而不是具体的X变量
可以将上面获得y属性的方法改成如下:
作业:运用反射技术,将任意一个对象中的所有String类型的成员所对应的字符串内容中的
“t”改成”m”;
源代码如下:
ReflectPoint.java
ReflectTest2.java
结果:
Method类:
代表某个类中的一个成员方法
得到类中的某一个方法:
Method charAt = Class.forName(“java.lang.String”).getMethod(“charAt”,int.class);
调用方法:
通常方式:System.out.println(str.charAt(1));
反射方式:System.out.println(charAt.invoke(str,1));
用反射方式执行某个类中的main方法:
目标:
写一个程序,根据用户提供的类名,执行该类中的main方法
数组的反射:
1, 具有相同维数和元素类型的数组属于同一个类型,即具有相同的Class实例对象
2, 代表数组的Class实例对象的getSuperClass()方法返回的父类为Object类对应的Class
3, 基本类型的一维数组可以被当作Object类型使用,不能被当作Object[]类型使用;非基本类型的一维数组,既可以当作Object类型使用,又可以当作Object[]类型使用。(基本数据类型不能当成对象使用,即不能转换成引用数据类型)
4, Arrays.asList()方法处理int[]和String[]时的差异
对数组进行反射:
ClassArray
hashCode方法与HashSet类:
HashSet集合中存放的元素不能重复,判断元素是否相同通过hashCode值和equals()方法
可以重写上述方法
注意:对象被存入hashSet集合后就不要更改计算hash值的属性了,更改后会找不到该对象导致该对象无法被删除,从而造成内存泄漏
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- Android内存调试命令
- github常见操作和常见错误!错误提示:fatal: remote origin already exists.
- [数据结构]第六章-树和二叉树(读书笔记3)
- Hibernate(七)——继承映射
- LogisticRegression.py 解析
- 反射
- float VS double
- ZZY的宠物(矩阵运算+快速幂)
- 创建一个圆角的JFrame
- 欢迎来我的博客
- HDU-2602-Bone Collector
- Linux下的小技巧
- JDBC的批量插入操作
- Android Fragment