java是強(qiáng)類(lèi)型語(yǔ)言,它提供了八種基本數(shù)據(jù)類(lèi)型, 其中有六種數(shù)字類(lèi)型,分別是byte、short、int、long、float、double??丛创a我們自然看不到這些類(lèi)型的源碼,我們要看的是這些類(lèi)型的包裝類(lèi)的源碼。今天我們就看看這些類(lèi)型的包裝類(lèi)的共同的祖先Number類(lèi)的源碼。
基礎(chǔ)知識(shí):
1.包裝類(lèi):java是一個(gè)面向?qū)ο蟮恼Z(yǔ)言,但java的基本數(shù)據(jù)類(lèi)型卻不是面向?qū)ο蟮?,這在實(shí)際的使用中會(huì)有諸多不便,為了解決這個(gè)不足,在設(shè)計(jì)類(lèi)時(shí)為每個(gè)基本數(shù)據(jù)類(lèi)型設(shè)計(jì)了一個(gè)對(duì)應(yīng)的類(lèi)進(jìn)行代表。這八個(gè)和基本類(lèi)型對(duì)應(yīng)的類(lèi)統(tǒng)稱(chēng)為包裝類(lèi)。
2.包裝類(lèi)的主要用途:同基本數(shù)據(jù)類(lèi)型對(duì)應(yīng)的類(lèi)類(lèi)型存在,方便涉及到對(duì)象的操作、每個(gè)類(lèi)中包含每種基本數(shù)據(jù)類(lèi)型相關(guān)屬性如最大值、最小值等,以及相關(guān)的操作方法。
3.抽象類(lèi):用來(lái)表征對(duì)問(wèn)題領(lǐng)域進(jìn)行分析、設(shè)計(jì)中得出的抽象概念,使用abstract 修飾類(lèi)名。抽象類(lèi)不能創(chuàng)建對(duì)象。
4.抽象方法:只有方法聲明,而沒(méi)有具體方法體的方法。只能定義在抽象類(lèi)中。用abstract修飾方法名。
5.接口:java語(yǔ)言中存在的有特定的語(yǔ)法和結(jié)構(gòu)。用interface修飾接口名,接口中的方法都是抽象方法(jdk1.7以前,1.8及以后可以有默認(rèn)方法)
接口中的變量都是常量。
Serializable:
public interface Serializable {
}
Serializable是一個(gè)接口,可以看到該接口中什么都沒(méi)有,它是一個(gè)標(biāo)識(shí),實(shí)現(xiàn)了Serializable接口的類(lèi)可以被序列化(可查看文章末尾序列化的定義)
serialVersionUID:
這個(gè)是用于對(duì)類(lèi)進(jìn)行版本控制的,對(duì)象反序列化(可查看文章末尾反序列化的定義)的時(shí)候會(huì)用到。
Number抽象類(lèi)中的方法:
public abstract int intValue();
public abstract long longValue();
public abstract float floatValue();
public abstract double doubleValue();
public byte byteValue() {
return (byte)intValue();
}
public short shortValue() {
return (short)intValue();
}
可以看到這些方法都是xxxValue,目的就是將數(shù)據(jù)轉(zhuǎn)換為相對(duì)應(yīng)的類(lèi)型,如intValue就是將數(shù)據(jù)轉(zhuǎn)換為int類(lèi)型,byteValue就是將數(shù)據(jù)轉(zhuǎn)換為byte類(lèi)型,這點(diǎn)從返回值我們也可以看出來(lái)
思考:
1.byte、short、int、long、float、double都是數(shù)字類(lèi)型,java為什么要搞出這么多的數(shù)字類(lèi)型出來(lái)。
2.Number是這些類(lèi)型的父類(lèi),既然他們的范圍不一樣,那么轉(zhuǎn)換時(shí)會(huì)不會(huì)出問(wèn)題
答1:因?yàn)樗鼈兊拈L(zhǎng)度各不相同,使用它們是系統(tǒng)開(kāi)銷(xiāo)也不相同。它們有不同的特點(diǎn),適用于不同的地方。我們可以根據(jù)不同的需要,而選擇類(lèi)型。
答2:轉(zhuǎn)換時(shí)當(dāng)然會(huì)出問(wèn)題,比如int類(lèi)型的129你將它轉(zhuǎn)換為byte時(shí)就會(huì)越界,得到的結(jié)果是-127。其它的大類(lèi)型轉(zhuǎn)換為小類(lèi)型的時(shí)候也會(huì)有同樣的問(wèn)題,所以使用的時(shí)候要格外小心。
序列化:
把對(duì)象轉(zhuǎn)換為字節(jié)序列的過(guò)程稱(chēng)為對(duì)象的序列化。轉(zhuǎn)換后的字節(jié)序列通常存儲(chǔ)于文件或數(shù)據(jù)庫(kù),用于網(wǎng)絡(luò)傳輸?shù)取?/p>
反序列化:
把字節(jié)序列恢復(fù)為對(duì)象的過(guò)程稱(chēng)為對(duì)象的反序列化。