13. Field[] fields = obj.getClass().getFields(); //扫描传进来的obj参数里面的字节码(getClass()),获取字节码里面所有变量(getFields())。
14. for(Field field : fields){ //增强型for循环,将fields数组中的元素迭代出来
if(field.getType() == String.class)//用==比较两个字节码更专业,(equalsOf也行,但是不恰当)
}
15. 方法对象.invoke(扫描到的方法字节码,第几个方法) 调用方法对象的里面的成员方法。在JDK1.4中,方法对象.invoke(扫描到的方法字节码,object[]{2})。
16. 通过getName()方法获取对象的字节码的名字中“[”表示数组,I表示int,B表示boolean等等等。获取父类的名字字节码用getSuperclass()方法。
17. Object[]不能装载基本类型的数组,如object[] = new int[4]是不成立的,但是object[] = new int[4][3]s是成立的。
18. 反射中只能得到某个元素的类型,无法得到成员对象中数组的类型。
19. ArrayList是一种有前后存放顺序(非大小顺序)的集合,数组中只是储存了引用句柄,并不是把句柄指向的数据存进去。HashSet存放不重复的数据,有存在的数据,覆盖掉。
20. Hashcode值为数据和内存位置换算出来的一种数据和位置表达方式,在hashSet中,划分为若干区域,数据根据计算出来的hashcode按特定规律依次存放在相应区域,如果要查找和某个数据相等的数据,只要查找特定区域内有没有,大大缩短了查找时间。
21. 一般数据的比较比较的是hashcode值,而不是实际的数据,hashcode值是数据存在在内存中的状态,其中包含了数据在内存中存储的方式和存储的位置,所以不同的两个对象,即使数据一模一样,但是内存的状态还是不一样的,hashcode值也是不一样的,所以无法相等(句柄不相等)。
22. 存在HashSet中的数据,不要修改,否则造成数据不能操作的错误(内存溢出)。