1Object類
1object類
1.1object類概述
? ? 是java中所有類的基類,根類饼酿。Object類是任何一個(gè)類的直接父類或者間接父類
Object提供了一些可以在任何一個(gè)Java中類型使用方法
? ? toString方法
? ? aquals方法
? ? hashCode方法
還存在一些和線程相關(guān)的方法:
? ? wait();
? ? notify()源内;
? ? notifyAll()毯炮;
Object作為一種數(shù)據(jù)類型,如果按照J(rèn)ava數(shù)據(jù)類型規(guī)范
? ? 一個(gè)方法需要的參數(shù)是Object類型肃弟,那么該方法可以傳入任何類型
? ? 一個(gè)方法需要返回值的類型是Object類型那么該方法的返回值可以是任意類型
【Object定義的數(shù)組玷室,可以保存任何Java類型】
【萬物皆可Object】
1.2toString方法【雞肋】
格式:
? ? public String toString()零蓉;
作用:
? ? 返回一個(gè)字符串,簡(jiǎn)要描述當(dāng)前類對(duì)象信息
【Object原生方法】
Student stu = new Student()穷缤;
Sout ==> stu
com.afen.entity.Student@15db9742
這就是Object類內(nèi)toString方法原生效果
【返回的是當(dāng)前對(duì)象對(duì)應(yīng)的完整包名敌蜂,類名@當(dāng)前對(duì)象在內(nèi)存空間首地址(16進(jìn)制)】
當(dāng)涉及到類對(duì)象需要設(shè)計(jì)信息簡(jiǎn)要描述時(shí),toString方法全會(huì)默認(rèn)自行調(diào)用
比如:
Sout 津肛,信息保存
【Object原生方法效果問題】
1展現(xiàn)信息較少
2無法直觀的看到類對(duì)象中保存的數(shù)據(jù)
在存在需求的情況下章喉,可以重寫toString方法來滿足當(dāng)前類對(duì)象簡(jiǎn)要描述需求。通常情況快捷鍵
Alt+ Shift + S
==>toString方法重寫
@Override public String toString() { return "Dog [name=" + name + ", age=" + age + "]"; } }
1.3equals方法【重點(diǎn)】
1.3.1equals方法原生概述
格式:
? ? public boolean? equals (Object obj)快耿;
作用:
? ? ? ?比較兩個(gè)類對(duì)象是否一致囊陡,是否是同一個(gè)對(duì)象,如果是返回true掀亥,如果不是返回false
在Object類內(nèi)的原始操作方式:
比較兩個(gè)對(duì)象的空間首地址撞反。
public boolean equals (Object obj){
return(this == obj);
}’
this 表示調(diào)用當(dāng)前方法的類對(duì)象搪花,實(shí)際就是一個(gè)空間首地址
obj是傳入的參數(shù)遏片,也是一個(gè)引用數(shù)據(jù)類型,同時(shí)也是保存一個(gè)空間首地址
【兩個(gè)對(duì)象空間首地址一致撮竿。表示同一個(gè)對(duì)象】
1.3.2equals方法如何重寫
思路
1判斷比較兩個(gè)對(duì)象是不是同一個(gè)對(duì)象
保留原本的this ==? obj 吮便,滿足條件直接判斷為true
2數(shù)據(jù)類型必須是一致的情況下才可以進(jìn)行比較!4碧ぁ髓需!如果equals方法傳入?yún)?shù)的數(shù)
據(jù)類型不是當(dāng)前調(diào)用方法的類對(duì)象對(duì)應(yīng)數(shù)據(jù)類型。沒有必要進(jìn)行比較
3判斷【自定義比較】?jī)?nèi)容
id name age 完全一致房蝉,兩個(gè)對(duì)象相同僚匆。
【注意】
equals 方法實(shí)際上是可以通過Ide開發(fā)工具直接完成的,完成的思路·過程和以上內(nèi)容一致搭幻,這里需要大家首先來自定義完成方法咧擂,后期使用工具來完成
System.out.println(person6.equals(person7));
1.3.3equals方法答辯
1明確equals方法的調(diào)用對(duì)象是誰,后期會(huì)存在大量同名方法檀蹋,但是調(diào)用對(duì)象不一致松申,效果不一致
2基本數(shù)據(jù)類型不能使用equals方法
3這里存在多態(tài)的使用
a.equals方法所需的參數(shù)是Object類型,不關(guān)什么類型數(shù)據(jù)傳入到方法中俯逾,都會(huì)自動(dòng)轉(zhuǎn)換為Object類型
b.方法內(nèi)instanceOf判斷當(dāng)前傳入的對(duì)象真實(shí)情況是不是當(dāng)前Person類型
c.強(qiáng)制類型轉(zhuǎn)換時(shí)在明確數(shù)據(jù)類型一致的情況下贸桶,完成的,是用于方法操作成員變量
4this
this表示調(diào)用當(dāng)前方法的類內(nèi)對(duì)象桌肴,equals方法調(diào)用方式
類對(duì)象..equals(另一個(gè)類對(duì)象)
this表示類對(duì)象
1.4hasCode方法【重點(diǎn)】
1.4.1hashCode方法原生概述
hash ==> 哈希
hashCode ==> 哈希值
哈希值是對(duì)象在開發(fā)中的唯一標(biāo)識(shí)E傩ァ!识脆!
哈希值一般用于一定的哈希結(jié)構(gòu)存儲(chǔ)中
? ? Java中hashCode方法是定義在Object類內(nèi)设联,也就是說每一個(gè)對(duì)象都有hashCode方法善已,可以獲取當(dāng)前對(duì)象的哈希值
? ? Object類默認(rèn)的哈希值是當(dāng)前對(duì)象的空間首地址,十進(jìn)制展示方式
1.4.2Java開發(fā)語法規(guī)則
Java中規(guī)定:?
? ?如果Java中的兩個(gè)對(duì)象使用equals方法比較結(jié)果為true离例,表示相同的對(duì)象换团,那么要求當(dāng)前比較的兩個(gè)對(duì)象對(duì)應(yīng)的hashCode是一 致的。
? ? 有且只重寫equals方法的情況下宫蛆,hashCode方法返回的數(shù)據(jù) 依然是對(duì)象對(duì)應(yīng)的空間首地址十進(jìn)制展示方式艘包,如果兩個(gè)對(duì)象按照自 定義equals方法比較結(jié)果為true,存在可能性兩個(gè)對(duì)象hashCode 值不一致耀盗,這樣會(huì)導(dǎo)致后期使用的數(shù)據(jù)結(jié)果中想虎,出現(xiàn)一些違背原則的 問題。? ? hashCode方法返回的哈希值叛拷,也是當(dāng)前對(duì)象在一定結(jié)構(gòu)內(nèi)的唯 一索引I喑!忿薇!
【代碼開發(fā)強(qiáng)制規(guī)定】? ? 如果按照自己的比較方式重寫了equals方法裙椭,必須重寫 hashCode方法,來滿足要求
1.4.3如何重寫hashCode方法
格式:?
?public int hashCode();?
?返回值為int類型
一般要求:? ?
?1. 會(huì)選擇帶有一定獨(dú)立性數(shù)據(jù)署浩,不可重復(fù)性數(shù)據(jù)作為 hashCodo返回?cái)?shù)據(jù)的首要選擇揉燃。? ??
2. hashCode在開發(fā)中或多或少都有可能出現(xiàn)沖突重復(fù)問題, 這里盡量避免=疃啊4短馈!
【原則】? ? equals方法比較結(jié)果為true弊攘,hashCode方法返回哈希一致
1.4.4屬性不存在對(duì)應(yīng)的int類型數(shù)據(jù)如何解決【小拓展】
情況解釋?
?實(shí)體類不存在任何一個(gè)int類型數(shù)據(jù)抢腐,不存在唯一性數(shù)據(jù)。 需要通過成員變量來完成組合操作獲取哈希值肴颊。
推薦一個(gè)方法? ?
?Objects工具類提供的hash方法? ?
?public static int hash(Object... values) {? ? ? ??
eturn Arrays.hashCode(values); ?? } ???
Object... ?? ? ??
Object當(dāng)前方法所需數(shù)據(jù)類型為Object,也就說支持任 何數(shù)據(jù)類型 ?? ? ??
... 表示這里參數(shù)個(gè)數(shù)不做任何限制渣磷,任意長(zhǎng)度婿着,可以沒 有參數(shù),可以是多個(gè)參數(shù) ?? ? ?
?... 不定長(zhǎng)參數(shù) ?? 指定的數(shù)據(jù)轉(zhuǎn)換計(jì)算之后得到一個(gè)具有唯一性的哈希值醋界。
2異常處理
2.1java中的異常規(guī)則
Java中異常和錯(cuò)誤的提示機(jī)制也是前因后果>顾巍!形纺!?
?都是存在一個(gè)最基本的原則丘侠,從哪里到哪里?
?Java中的異常,錯(cuò)題提示已經(jīng)非常優(yōu)秀了V鹧N献帧打肝!?
?TeamViewer 耐心看錯(cuò)誤!E膊丁粗梭!?
?錯(cuò)誤修改有助于提升技術(shù)!<读恪断医!?
?C語言 段錯(cuò)誤!W嗉汀鉴嗤!?
?從頭到尾去捋邏輯!
2.3Throwable類
Throwable是Java中所有異常和錯(cuò)誤的基類?
--| Error 錯(cuò)誤
?--| Exception 異常
構(gòu)造方法:?
?Throwable();?
?創(chuàng)建一個(gè)Throwable類對(duì)象序调,其中保存的異匙砉或者錯(cuò)誤信 息為null
?Throwable(String message); 【重點(diǎn)】?
?創(chuàng)建一個(gè)Throwable類對(duì)象,其中保存的異晨恢茫或者錯(cuò)誤信 息為message
成員方法:? ? ??
?String toString();? ? ? ??
得到當(dāng)前異常的簡(jiǎn)要信息描述? ??
String getMessage();? ? ? ??
獲取當(dāng)前Throwable類對(duì)象中保存的異橙侔ぃ或者錯(cuò)誤信息? ??
void printStackTrace(); 【偽重點(diǎn)】 ?? ? ??
在命令行中展示錯(cuò)誤的前因后果!F犹默垄!紅色字體
2.4Error和Exception
Error 錯(cuò)誤?
?無法處理,只能避免I醺佟?诙А!?
?錯(cuò)誤都是Error結(jié)尾?
Exception 異常?
?可以處理介杆,還有挽回的余地?
?異常都是Exception結(jié)尾 J
ava代碼中有一個(gè)數(shù)組需要申請(qǐng)64GB內(nèi)存鹃操,(目前電腦內(nèi)存32GB)
?不可能!4荷凇荆隘!錯(cuò)誤 Error
Java中代碼需要一個(gè)數(shù)組,但是比給予操作的數(shù)組不合法? ??
可以處理的赴背,Exception