黑马程序员之反射2

来源:互联网 发布:矩阵数据分析法 编辑:程序博客网 时间:2024/05/16 18:41
 

---------------------- android培训、java培训、期待与您交流! ----------------------生活在于学习,生活才更加精彩,加油!

数组与Object的关系

数组也是一种类型:每个数组只要维数相同,还有相同的元素类型,那么数组的字节码就是同一份,下面来验证一下:

int[]a1=new int[3];

int[]a2=new int[4];

int[][]a3=new int[2][3];

String[]a4=new String[3];

a1.getClass()==a2.getClass();同一份字节码;

a1.getClass().getName();获得类型的名字;

a1.getClass().getSuperclass().getName();父类名

总结:基本类型不是Object:基本类型一维数组是不能转换为Object数组的

不写for循环,我们怎样遍历数组里面的元素:

Arrays.asList(a1);整数的转不出来。因为asList()接受的是一个Object[] 对象

Arrays.asList(a4);字符串中的元素能打印出来

//对数组的反射

得到数组的值,设置数组的值,还要得到数组的长度:

你给我一个Object我就把他给打印出来:

Public static void print(Object obj){

Class clazz=obj.getClass();

If(clazz.isArray()){

Int len=Array.getLength(obj);

For(int i=0;i<len;i++){

System.out.println(Array.get(obj,i));

}else{

System.out.println(obj);

}

}

}//是数组就把你给拆出来

没办法得到数组的类型?

Object[]a里可以放很多中类型的对象,只能得到其中某一个对象的类型

如a[0].getClass().getName();

//ArrayList 与HashSet的比较:

ArrayList是有顺序的,他相当于一个数组,放进去第一个元素时,内存就会记住,放在第一个位置,用应用变量记住,当你放进去相同的元素时通用能放进去,一个引用变量可以被几个元素对象所引用

HashSet:是没有顺序的,当放进元素对象时,首先要检查equels()方法和HashCode()方法

public int hashCode(){

final int prime=31;

int result=1;

result =prime*result+x;

result =prime*result+y;

return result;

}

Public boolean equals(Object obj){

If(this==obj)

Return true;

If(this==null)

Return false;

If(this.getClass()!=obj.getClass())

Return false;

Final ReflectPoint other = (ReflectPoint)obj;

if(x!=other.x)

return false;

if(x!=other.y)

return false;

return true;

}

hashSet集合中存了一万个元素,如果有相同的就放不进去,为了提高效率发明了哈希算法,分了好多的区域每个区域都有一个值,当把数放进去的时候,先计算这个对象哈希值,符合某个区域的值就会直接到某个区域寻找,而不去其他区域寻找了,提高了效率、当对象一旦被存入后 就不要去改变参与计算哈希值的参数了,否则就会造成内存泄漏

 

 

---------------------- android培训、java培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net/heima