美文网首页
Java核心技术卷一 Object,反射,泛型,拷贝

Java核心技术卷一 Object,反射,泛型,拷贝

作者: KIOHES | 来源:发表于2016-08-18 21:50 被阅读118次

    1.equals

    2.hashcode

    3.clone中的深拷贝,浅拷贝。如何实现重写子类中的clone。

    4.获得class类型的类型实例(注意和实例对象分开)的方法

    5.反射

    6.泛型




    1.equals

      这是Object类中提供的一种方法。这个方法作为比较的是两个对象是否引用指向同一个对象地址,实际用处不大(引用地址相同那不就是在用同一个对象了么。。能有不同么-。-)我们在子类中,为了实现其他相等测试时(例如两个对象的某个成员变量是否相等/两个对象是否为同一个类。。等等)时重写这个方法,最好首先时候父类中的equals方法,然后再根据自己需要的功能进行实现。同时还应遵守下一五个特性

    2.hashcode

     原先hashcod(哈希值,散列值,散列码)是由一种特殊算法输出的值,输入的对象不同,输出的值基本不可能相同。在这里Java中一般每个对象都有一个默认的hashcode,这个值时对象的存储地址。

    散列表Hash table,也叫哈希表),是根据(Key)而直接访问在内存存储位置的数据结构。也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录,这加快了查找速度。这个映射函数称做散列函数,存放记录的数组称做散列表

    如果重写了equals方法就必须重写hashcode方法,他们两个定义必须一致(??这是什么,不太懂)。然而字符串类型的hashcode是不一样的,他们如果字符串内容相同,则hashcode相同。算是上面的例子吗

    3.clone中的深拷贝,浅拷贝。如何实现重写子类中的clone。

      clone是Object类中提供的另一种方法,由protected修饰,不能直接运用(里面也没写为什么不能直接运用,我理解是Object类这个方法不若是被使用时不能理解你所传的对象中的成员变量是否都为基本数值类型,如成员变量含有其他对象则拷贝方法不同)。

      我们一般只是将对象引用赋予给另一个变量,例如

    Student A = new Student();

    Student B = A;//这里A和B都是指向同一个对象,因为只是将引用地址传给了另一个变量,这里A或者B对他们所指的对象进行修改时,另外一个变量所指的对象其实也在改变。

     完全复制一个对象到一个新的空间,使得原对象和复制完的对象相互独立,互不影响时,就要使用到clone()方法,不过需要我们自己实现。

    clone 希望实现的效果

      如何才能在子类或者其他类中使用clone方法呢?(object提供的clone是浅拷贝,经下列处理不重写也能用)

    就算不重写,只是用原来的clone也需要这么做,不过只需要在实现中写成return super.clone(Object obj);

      在这里Cloneable接口其实只是一个标志接口,里面并不需要我们实现任何方法,只是提醒我们这个类已经知道要进行克隆处理。

      什么是深拷贝,浅拷贝呢?

      假设有我们需要进行克隆的对象是A,按照A克隆出来的对象为B。在我们需要克隆的对象中,如果全部都是基本数值类型(int,double。。等等)。那么就没有问题,A或B其中一个对象发生改变,并不会影响另一个对象B或A。

      若是A中的成员变量不是基本类型,而是对象类型。以为这有一个成员变量指向另一个对象。那么前拷贝并不会重新分配一个空间去进行这个成员变量的拷贝。而只是将引用地址传给了B中的成员变量。若是A或者B更改了这个引用类型的成员变量,那么另外一个都是受到影响,意味着其实他们在共用一个成员变量。(如是不可变的对象则没有关系,例如String的一旦构造完就不会改变。若类中方法对对象中的成员变量不作改变的,那么这个类实例化出来的就是不可变对象)

       所以若需要深拷贝则需要我们自己重写,并理清其中的关系。

    4.获得class类对象(注意和实例对象分开)的方法

      一。class myclass = obj.getClass();//使用getClass()

      二。

    5.反射

    意味着我们可以使用一些特殊的函数(方法)来查看一个类的成员变量类型,方法的返回类型,构造器甚至是参数类型等,这些都是利用反射机制来分析类的结构。

    6.泛型

      当使用 Collection 时,我们经常要做的一件事情就是要进行类型转换,当转换成所需的类型以后,再对它们进行处理。很明显,这种设计给编程人员带来了极大的不便,同时也容易引入错误。 

    泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。

    意味着它的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。


    相关文章

      网友评论

          本文标题:Java核心技术卷一 Object,反射,泛型,拷贝

          本文链接:https://www.haomeiwen.com/subject/qsrvsttx.html