1.equals
2.hashcode
3.clone中的深拷貝畦徘,淺拷貝毕籽。如何實(shí)現(xiàn)重寫子類中的clone。
4.獲得class類型的類型實(shí)例(注意和實(shí)例對(duì)象分開)的方法
5.反射
6.泛型
1.equals
? 這是Object類中提供的一種方法井辆。這個(gè)方法作為比較的是兩個(gè)對(duì)象是否引用指向同一個(gè)對(duì)象地址关筒,實(shí)際用處不大(引用地址相同那不就是在用同一個(gè)對(duì)象了么。杯缺。能有不同么-蒸播。-)我們?cè)谧宇愔校瑸榱藢?shí)現(xiàn)其他相等測(cè)試時(shí)(例如兩個(gè)對(duì)象的某個(gè)成員變量是否相等/兩個(gè)對(duì)象是否為同一個(gè)類夺谁。廉赔。等等)時(shí)重寫這個(gè)方法肉微,最好首先時(shí)候父類中的equals方法,然后再根據(jù)自己需要的功能進(jìn)行實(shí)現(xiàn)蜡塌。同時(shí)還應(yīng)遵守下一五個(gè)特性
2.hashcode
?原先hashcod(哈希值碉纳,散列值,散列碼)是由一種特殊算法輸出的值馏艾,輸入的對(duì)象不同劳曹,輸出的值基本不可能相同。在這里Java中一般每個(gè)對(duì)象都有一個(gè)默認(rèn)的hashcode琅摩,這個(gè)值時(shí)對(duì)象的存儲(chǔ)地址铁孵。
散列表(Hash table,也叫哈希表)房资,是根據(jù)鍵(Key)而直接訪問(wèn)在內(nèi)存存儲(chǔ)位置的數(shù)據(jù)結(jié)構(gòu)蜕劝。也就是說(shuō),它通過(guò)計(jì)算一個(gè)關(guān)于鍵值的函數(shù)轰异,將所需查詢的數(shù)據(jù)映射到表中一個(gè)位置來(lái)訪問(wèn)記錄岖沛,這加快了查找速度。這個(gè)映射函數(shù)稱做散列函數(shù)搭独,存放記錄的數(shù)組稱做散列表
如果重寫了equals方法就必須重寫hashcode方法婴削,他們兩個(gè)定義必須一致(?牙肝?這是什么唉俗,不太懂)。然而字符串類型的hashcode是不一樣的配椭,他們?nèi)绻址畠?nèi)容相同虫溜,則hashcode相同。算是上面的例子嗎
3.clone中的深拷貝颂郎,淺拷貝吼渡。如何實(shí)現(xiàn)重寫子類中的clone。
? clone是Object類中提供的另一種方法乓序,由protected修飾寺酪,不能直接運(yùn)用(里面也沒(méi)寫為什么不能直接運(yùn)用,我理解是Object類這個(gè)方法不若是被使用時(shí)不能理解你所傳的對(duì)象中的成員變量是否都為基本數(shù)值類型替劈,如成員變量含有其他對(duì)象則拷貝方法不同)寄雀。
? 我們一般只是將對(duì)象引用賦予給另一個(gè)變量,例如
Student A = new Student()陨献;
Student B = A盒犹;//這里A和B都是指向同一個(gè)對(duì)象,因?yàn)橹皇菍⒁玫刂穫鹘o了另一個(gè)變量,這里A或者B對(duì)他們所指的對(duì)象進(jìn)行修改時(shí)急膀,另外一個(gè)變量所指的對(duì)象其實(shí)也在改變沮协。
?完全復(fù)制一個(gè)對(duì)象到一個(gè)新的空間,使得原對(duì)象和復(fù)制完的對(duì)象相互獨(dú)立卓嫂,互不影響時(shí)慷暂,就要使用到clone()方法,不過(guò)需要我們自己實(shí)現(xiàn)晨雳。
? 如何才能在子類或者其他類中使用clone方法呢行瑞?(object提供的clone是淺拷貝,經(jīng)下列處理不重寫也能用)
? 在這里Cloneable接口其實(shí)只是一個(gè)標(biāo)志接口,里面并不需要我們實(shí)現(xiàn)任何方法帮非,只是提醒我們這個(gè)類已經(jīng)知道要進(jìn)行克隆處理氧吐。
? 什么是深拷貝,淺拷貝呢喜鼓?
? 假設(shè)有我們需要進(jìn)行克隆的對(duì)象是A副砍,按照A克隆出來(lái)的對(duì)象為B。在我們需要克隆的對(duì)象中庄岖,如果全部都是基本數(shù)值類型(int,double角骤。隅忿。等等)。那么就沒(méi)有問(wèn)題邦尊,A或B其中一個(gè)對(duì)象發(fā)生改變背桐,并不會(huì)影響另一個(gè)對(duì)象B或A。
? 若是A中的成員變量不是基本類型蝉揍,而是對(duì)象類型链峭。以為這有一個(gè)成員變量指向另一個(gè)對(duì)象。那么前拷貝并不會(huì)重新分配一個(gè)空間去進(jìn)行這個(gè)成員變量的拷貝又沾。而只是將引用地址傳給了B中的成員變量弊仪。若是A或者B更改了這個(gè)引用類型的成員變量,那么另外一個(gè)都是受到影響杖刷,意味著其實(shí)他們?cè)诠灿靡粋€(gè)成員變量励饵。(如是不可變的對(duì)象則沒(méi)有關(guān)系,例如String的一旦構(gòu)造完就不會(huì)改變滑燃。若類中方法對(duì)對(duì)象中的成員變量不作改變的役听,那么這個(gè)類實(shí)例化出來(lái)的就是不可變對(duì)象)
?? 所以若需要深拷貝則需要我們自己重寫,并理清其中的關(guān)系。
4.獲得class類對(duì)象(注意和實(shí)例對(duì)象分開)的方法
? 一典予。class myclass = obj.getClass()甜滨;//使用getClass()
? 二。
三
5.反射
意味著我們可以使用一些特殊的函數(shù)(方法)來(lái)查看一個(gè)類的成員變量類型瘤袖,方法的返回類型艳吠,構(gòu)造器甚至是參數(shù)類型等,這些都是利用反射機(jī)制來(lái)分析類的結(jié)構(gòu)孽椰。
6.泛型
? 當(dāng)使用 Collection 時(shí)昭娩,我們經(jīng)常要做的一件事情就是要進(jìn)行類型轉(zhuǎn)換,當(dāng)轉(zhuǎn)換成所需的類型以后黍匾,再對(duì)它們進(jìn)行處理栏渺。很明顯,這種設(shè)計(jì)給編程人員帶來(lái)了極大的不便锐涯,同時(shí)也容易引入錯(cuò)誤磕诊。?
泛型提供了編譯時(shí)類型安全檢測(cè)機(jī)制,該機(jī)制允許程序員在編譯時(shí)檢測(cè)到非法的類型纹腌。
意味著它的本質(zhì)是參數(shù)化類型霎终,也就是說(shuō)所操作的數(shù)據(jù)類型被指定為一個(gè)參數(shù)。