java基礎(chǔ)知識(shí)總結(jié)——數(shù)據(jù)類型阴挣、變量年栓、修飾符以及接口和抽象類

這是我java基礎(chǔ)知識(shí)的第一篇文章,本來(lái)早就寫好了直接將markdown文檔復(fù)制過(guò)來(lái)發(fā)表就好的,結(jié)果中途遇到了兩個(gè)問(wèn)題:

  • 無(wú)法使用markdown編輯器,而簡(jiǎn)書中的文章一旦采用了一種編輯方式之后就不能更改了,可以看markdown編輯器右上角有沒(méi)有預(yù)覽按鈕來(lái)判斷是否切換成功.
  • 無(wú)法將合并了單元格的html代碼復(fù)制到文章里生成表格(這在typora中是可以的),最后我直接截圖復(fù)制圖片了,效果也可以.

1、8種基本數(shù)據(jù)類型:

image.png

1.1 精度擴(kuò)展

如果基本的整數(shù)和浮點(diǎn)數(shù)精度不能夠滿足需求糜烹,那么可以使用java.math包中的兩個(gè)很有用的類:BigInteger和BigDecimal這兩個(gè)類可以處理包含任意長(zhǎng)度數(shù)字序列的數(shù)值违诗。BigInteger類實(shí)現(xiàn)了任意精度的整數(shù)運(yùn)算,BigDecimal實(shí)現(xiàn)了任意精度的浮點(diǎn)數(shù)運(yùn)算疮蹦。

1.2 char類型的字節(jié)長(zhǎng)度解釋

引用:https://blog.csdn.net/nimasike/article/details/88345414

Java采用Unicode進(jìn)行編碼诸迟,char類型在內(nèi)存中占2個(gè)字節(jié)-16位,其值的范圍在0-65535之間愕乎。20 世紀(jì) 80 年代開(kāi)始啟動(dòng)設(shè)計(jì) Unicode 編碼時(shí)阵苇,人們認(rèn)為兩個(gè)字節(jié)(16 位)的代碼寬度足以對(duì)世界上各種語(yǔ)言的所有字符進(jìn)行編碼,并有足夠空間留給未來(lái)的擴(kuò)展妆毕。所以在設(shè)計(jì) Java 時(shí)決定采用 16 位的 Unicode 字符集慎玖。目前Unicode編碼范圍在0-1114111之間,顯然一個(gè)char類型已經(jīng)不能夠存65535以外的字符了笛粘,因此Java采用代理區(qū)模式來(lái)表示65535以外的字符。

代理區(qū)模式:在0-65535之間,保留了一部分?jǐn)?shù)字范圍(D800–DBFF)和(DC00–DFFF)薪前。(D800–DBFF)叫高代理區(qū)和(DC00–DFFF)叫低代理區(qū)润努,各1024,這兩個(gè)區(qū)組成一個(gè)二維的表格示括,共有1024×1024=210×210=24×216=16×65536铺浇,用它們來(lái)表示Unicode中65535以后的字符。

1.3 boolean類型的字節(jié)長(zhǎng)度解釋

引用:https://blog.csdn.net/YuanMxy/article/details/74170745

在《Java虛擬機(jī)規(guī)范》一書中的描述:“雖然定義了boolean這種數(shù)據(jù)類型垛膝,但是只對(duì)它提供了非常有限的支持鳍侣。在Java虛擬機(jī)中沒(méi)有任何供boolean值專用的字節(jié)碼指令,Java語(yǔ)言表達(dá)式所操作的boolean值吼拥,在編譯之后都使用Java虛擬機(jī)中的int數(shù)據(jù)類型來(lái)代替倚聚,而boolean數(shù)組將會(huì)被編碼成Java虛擬機(jī)的byte數(shù)組,每個(gè)元素boolean元素占8位”凿可。也就是說(shuō)JVM規(guī)范指出boolean當(dāng)做int處理惑折,也就是4字節(jié),boolean數(shù)組當(dāng)做byte數(shù)組處理枯跑,這樣我們可以得出boolean類型占了單獨(dú)使用是4個(gè)字節(jié)早敬,在數(shù)組中是確定的1個(gè)字節(jié)夯秃。

那虛擬機(jī)為什么要用int來(lái)代替boolean呢?為什么不用byte或short,這樣不是更節(jié)省內(nèi)存空間嗎宙刘。經(jīng)過(guò)查閱資料發(fā)現(xiàn),使用int的原因是升敲,對(duì)于當(dāng)下32位的處理器(CPU)來(lái)說(shuō)碉渡,一次處理數(shù)據(jù)是32位(這里不是指的是32/64位系統(tǒng),而是指CPU硬件層面)评疗,32 位 CPU 使用 4 個(gè)字節(jié)是最為節(jié)省的测砂,哪怕你是 1 個(gè) bit 他也是占用 4 個(gè)字節(jié)。因?yàn)?CPU 尋址系統(tǒng)只能 32 位 32 位地尋址百匆,具有高效存取的特點(diǎn)砌些。

java規(guī)范中,沒(méi)有明確指出boolean的大小加匈。在《Java虛擬機(jī)規(guī)范》給出了4個(gè)字節(jié)存璃,和boolean數(shù)組1個(gè)字節(jié)的定義,具體還要看虛擬機(jī)實(shí)現(xiàn)是否按照規(guī)范來(lái)雕拼,所以1個(gè)字節(jié)纵东、4個(gè)字節(jié)都是有可能的,取決于java虛擬機(jī)啥寇。

1.4浮點(diǎn)類型數(shù)據(jù)的取值范圍和精度解釋

引用:https://blog.csdn.net/qq_40696431/article/details/89957747

Java語(yǔ)言的浮點(diǎn)類型默認(rèn)是double類型偎球,如果希望Java把一個(gè)浮點(diǎn)類型值當(dāng)成float類型處理洒扎,應(yīng)該在這個(gè)浮點(diǎn)類型值后緊跟f或F。例如衰絮,5.12代表一個(gè)double類型的值袍冷,占64位的內(nèi)存空間;5.12f或5.12F才表示一個(gè)float類型的值猫牡,占32位的內(nèi)存空間胡诗。當(dāng)然,也可以在一個(gè)浮點(diǎn)數(shù)后添加d或D后綴淌友,強(qiáng)制指定double類型煌恢,但通常沒(méi)必要。

Java還提供了三個(gè)特殊的浮點(diǎn)數(shù)值:正無(wú)窮大震庭、負(fù)無(wú)窮大和非數(shù)瑰抵,用于表示溢出和出錯(cuò)。例如归薛,使用一個(gè)正數(shù)除以0將得到正無(wú)窮大谍憔,使用一個(gè)負(fù)數(shù)除以0將得到負(fù)無(wú)窮大,0.0除以0.0或?qū)σ粋€(gè)負(fù)數(shù)開(kāi)方將得到一個(gè)非數(shù)主籍。正無(wú)窮大通過(guò)Double或Float類的POSITIVE_INFINITY表示习贫;負(fù)無(wú)窮大通過(guò)Double或Float類的NEGATIVE_INFINITY表示,非數(shù)則通過(guò)Double或Float類的NaN表示千元。所有的正無(wú)窮大數(shù)值都是相等的苫昌,所有的負(fù)無(wú)窮大數(shù)值都是相等的;而NaN不與任何數(shù)值相等幸海,甚至和NaN都不相等祟身。

只有浮點(diǎn)數(shù)除以0才可以得到正無(wú)窮大或負(fù)無(wú)窮大,因?yàn)镴ava語(yǔ)言會(huì)自動(dòng)把和浮點(diǎn)數(shù)運(yùn)算的0(整數(shù))當(dāng)成0.0(浮點(diǎn)數(shù))處理物独。如果一個(gè)正數(shù)除以0袜硫,則會(huì)拋出一個(gè)異常:ArithmeticException:/by zero(除以0異常)。

1.4.1浮點(diǎn)數(shù)的組成結(jié)構(gòu)

符號(hào)位S,指數(shù)位E,尾數(shù)位M

例如挡篓,一個(gè)float類型的數(shù)據(jù)占用4個(gè)字節(jié)共32位婉陷,其各個(gè)組成部分為:

符號(hào)位(S):最高位(31位)為符號(hào)位,表示整個(gè)浮點(diǎn)數(shù)的正負(fù)官研,0為正秽澳,1為負(fù)

指數(shù)位(E):23-30位共8位為指數(shù)位,這里指數(shù)的底數(shù)規(guī)定為2戏羽。并且指數(shù)位是以補(bǔ)碼的形式來(lái)劃分的(最高位為指數(shù)位的符號(hào)位担神,0為正,1為負(fù))始花。所以指數(shù)位真正范圍為:-128~127

尾數(shù)位(M):0-22位共23位為尾數(shù)位妄讯,表示小數(shù)部分的尾數(shù)孩锡,即形式為1.M或0.M,至于什么時(shí)候是 1 什么時(shí)候是 0捞挥,則由指數(shù)和尾數(shù)共同決定浮创。

1.4.2取值范圍

float和double的取值范圍是由指數(shù)的位數(shù)來(lái)決定的忧吟,其中砌函,負(fù)指數(shù)決定了浮點(diǎn)數(shù)所能表達(dá)的絕對(duì)值最小的非0數(shù),而正指數(shù)決定了浮點(diǎn)數(shù)所能表達(dá)的絕對(duì)值最大的數(shù)溜族,也即決定了浮點(diǎn)數(shù)的取值范圍讹俊。

S:符號(hào)位,E:指數(shù)位煌抒,M:尾數(shù)位

float:S1_E8_M23仍劈,指數(shù)位有8位,指數(shù)的取值范圍為-27~27-1(即-128~127)

float的取值范圍為-2^128 ~ +2^127(1038級(jí)別的數(shù))

double:S1_E11_M52寡壮,指數(shù)位有11位贩疙,指取的取值數(shù)范圍為-210~210-1(即-1024~1023)

double的取值范圍為-2^1024 ~ +2^1023(10308級(jí)別的數(shù))

1.4.3精度

float和double的精度是由尾數(shù)的位數(shù)來(lái)決定的,float的尾數(shù)位有23位况既,double的尾數(shù)位有52位这溅。

float:S1_E8_M23,尾數(shù)位有23位棒仍,2^23 = 8388608悲靴,一共7位,這意味著最多能有7位有效數(shù)字莫其,但能保證的為6位癞尚,也即float的精度為6~7位有效數(shù)字;

double:S1_E11_M52乱陡,尾數(shù)位有52位浇揩,2^52 = 45035 99627 37049 6,一共16位憨颠,同理胳徽,double的精度為15~16位有效數(shù)字。

2烙心、變量類型

類變量:定義在類中且在方法膜廊、語(yǔ)句塊外面,被final/static關(guān)鍵字修飾的變量淫茵。

成員變量(全局變量):定義在類中且在方法爪瓜、語(yǔ)句塊外面的變量就是成員變量。

局部變量:定義在方法匙瘪、語(yǔ)句塊中铆铆,需要給局部變量賦初值蝶缀,否則會(huì)出現(xiàn)編譯期異常。

變量類型 類變量(靜態(tài)變量) 成員變量(全局變量薄货、實(shí)例變量) 局部變量
銷毀時(shí)間 在第一次被訪問(wèn)時(shí)創(chuàng)建翁都,在程序結(jié)束時(shí)銷毀 在對(duì)象創(chuàng)建的時(shí)候創(chuàng)建,在對(duì)象被銷毀的時(shí)候銷毀 在方法或者語(yǔ)句塊被執(zhí)行的時(shí)候創(chuàng)建谅猾,當(dāng)它們執(zhí)行完成后柄慰,變量將會(huì)被銷毀;
修飾符 public/private税娜,final static 訪問(wèn)修飾符(public/private/default/protected) 訪問(wèn)修飾符不能用于局部變量
默認(rèn)值 與實(shí)例變量一致 數(shù)值型變量是0坐搔,布爾型變量是false,引用類型變量是null敬矩,char類型是空字符('\u0000') 沒(méi)有默認(rèn)值概行,必須要進(jìn)行初始化

3、修飾符

修飾符分為訪問(wèn)修飾符與非訪問(wèn)修飾符弧岳。

3.1訪問(wèn)修飾符(訪問(wèn)權(quán)限控制)

public(公有訪問(wèn)修飾符):被聲明為public的類凳忙、方法、構(gòu)造方法禽炬、接口能被任何其他類訪問(wèn)涧卵。

protected(受保護(hù)的訪問(wèn)修飾符):protected 可以修飾數(shù)據(jù)成員(變量),構(gòu)造方法瞎抛,方法成員(方法)艺演,不能修飾類(內(nèi)部類除外),且能被同一個(gè)包下的類訪問(wèn)桐臊。接口及接口的成員變量和成員方法不能聲明為 protected胎撤。

子類與基類在不同包中,子類實(shí)例可以訪問(wèn)從基類繼承而來(lái)的protected方法断凶,而不能直接訪問(wèn)基類的protected方法伤提。(僅針對(duì)protected方法)

default(默認(rèn)訪問(wèn)修飾符):使用默認(rèn)訪問(wèn)修飾符聲明的變量和方法,對(duì)同一個(gè)包內(nèi)的類是可見(jiàn)的认烁。接口里的變量都隱式聲明為 public static final,而接口里的方法默認(rèn)情況下訪問(wèn)權(quán)限為 public肿男。

private(私有訪問(wèn)修飾符):在同一類內(nèi)可見(jiàn)。使用對(duì)象:變量却嗡、方法舶沛。 注意:不能修飾類(外部類)

訪問(wèn)控制修飾符 當(dāng)前類 同一包內(nèi) 不同包內(nèi)(子孫類) 其他包
public Y Y Y Y
protected Y Y Y/N N
default Y Y N N
private Y N N N

3.2非訪問(wèn)修飾符

  1. static 修飾符,用來(lái)修飾類方法和類變量窗价。
  • 靜態(tài)變量:

    static 關(guān)鍵字用來(lái)聲明獨(dú)立于對(duì)象的靜態(tài)變量如庭,無(wú)論一個(gè)類實(shí)例化多少對(duì)象,它的靜態(tài)變量只有一份拷貝撼港。 靜態(tài)變量也被稱為類變量坪它。局部變量不能被聲明為 static 變量骤竹。

  • 靜態(tài)方法:

  1. static 關(guān)鍵字用來(lái)聲明獨(dú)立于對(duì)象的靜態(tài)方法。靜態(tài)方法不能使用類的非靜態(tài)變量往毡。靜態(tài)方法從參數(shù)列表得到數(shù)據(jù)蒙揣,然后計(jì)算這些數(shù)據(jù)。

  2. final 修飾符开瞭,用來(lái)修飾類懒震、方法和變量,final 修飾的類不能夠被繼承惩阶,修飾的方法不能被繼承類重新定義挎狸,修飾的變量為常量,是不可修改的断楷。

  3. abstract 修飾符,用來(lái)創(chuàng)建抽象類和抽象方法崭别。

  4. synchronized 和 volatile 修飾符冬筒,主要用于線程的編程。

4茅主、接口舞痰、抽象類的注意事項(xiàng)

4.1抽象類

  1. 抽象類與抽象方法都由abstract修飾符修飾,抽象類不能用來(lái)實(shí)例化對(duì)象诀姚,聲明抽象類的唯一目的是為了將來(lái)對(duì)該類進(jìn)行擴(kuò)充响牛,它需要被一個(gè)子類繼承。

  2. 抽象類中含有抽象方法也可以含有非抽象方法(抽象類中也可以不包含抽象方法)赫段,但若類中含有抽象方法則該類必須是抽象類呀打。

  3. 抽象方法沒(méi)有方法體public abstract sample();,該方法的具體實(shí)現(xiàn)由子類提供(除非子類也是抽象類)糯笙,且子類必須要實(shí)現(xiàn)所有的抽象方法贬丛。

4.2接口

接口在 Java 中是一個(gè)抽象類型,是抽象方法的集合给涕;接口通過(guò)關(guān)鍵字 interface 來(lái)定義豺憔。

接口是隱式抽象的,所以聲明時(shí)沒(méi)有必要使用 abstract 關(guān)鍵字够庙;接口的每個(gè)方法都是隱式抽象的恭应,所以同樣不需要使用 abstract 關(guān)鍵字;接口中的方法都是隱式 public 的耘眨。

抽象類存在的意義:

如果類直接實(shí)現(xiàn)該接口的話昼榛,就需要對(duì)接口中的所有方法進(jìn)行實(shí)現(xiàn)。

如果我們只需要對(duì)接口中某一部分方法進(jìn)行實(shí)現(xiàn)的話毅桃,就可以使用一個(gè)抽象類作為中間件褒纲,即適配器(AdapterCoach)准夷,用這個(gè)抽象類實(shí)現(xiàn)接口,并對(duì)抽象類中的方法置空(方法體只有一對(duì)花括號(hào))莺掠,這時(shí)候新類就可以繞過(guò)接口衫嵌,繼承抽象類,我們就可以只對(duì)需要的方法進(jìn)行覆蓋彻秆,而不是接口中的所有方法楔绞。

接口與抽象類的區(qū)別與聯(lián)系:

  1. 抽象類可以有非抽象方法,但接口沒(méi)有唇兑。

  2. 接口中的成員變量隱式為 static final酒朵,但抽象類不是的。

  3. 一個(gè)類可以實(shí)現(xiàn)(implements)多個(gè)接口扎附,但只能繼承(extends)一個(gè)抽象類(可以多重繼承)蔫耽。

  4. 接口中的所有方法都必須實(shí)現(xiàn);若子類也是抽象類則抽象方法可以不用全部實(shí)現(xiàn)留夜,否則也要全部實(shí)現(xiàn)匙铡。

  5. 接口可以繼承接口,抽象類不可以繼承接口碍粥,但可以實(shí)現(xiàn)接口鳖眼,抽象類可以繼承實(shí)體類。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末嚼摩,一起剝皮案震驚了整個(gè)濱河市钦讳,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌枕面,老刑警劉巖愿卒,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異膊畴,居然都是意外死亡掘猿,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門唇跨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)稠通,“玉大人,你說(shuō)我怎么就攤上這事买猖「拈伲” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵玉控,是天一觀的道長(zhǎng)飞主。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么碌识? 我笑而不...
    開(kāi)封第一講書人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任碾篡,我火速辦了婚禮,結(jié)果婚禮上筏餐,老公的妹妹穿的比我還像新娘开泽。我一直安慰自己,他們只是感情好魁瞪,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布穆律。 她就那樣靜靜地躺著,像睡著了一般导俘。 火紅的嫁衣襯著肌膚如雪峦耘。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 49,816評(píng)論 1 290
  • 那天旅薄,我揣著相機(jī)與錄音辅髓,去河邊找鬼。 笑死赋秀,一個(gè)胖子當(dāng)著我的面吹牛利朵,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播猎莲,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼技即!你這毒婦竟也來(lái)了著洼?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤而叼,失蹤者是張志新(化名)和其女友劉穎身笤,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體葵陵,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡液荸,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了脱篙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片娇钱。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖绊困,靈堂內(nèi)的尸體忽然破棺而出文搂,到底是詐尸還是另有隱情,我是刑警寧澤秤朗,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布煤蹭,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏硝皂。R本人自食惡果不足惜常挚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望稽物。 院中可真熱鬧奄毡,春花似錦、人聲如沸姨裸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)傀缩。三九已至那先,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間赡艰,已是汗流浹背售淡。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留慷垮,地道東北人揖闸。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像料身,于是被迫代替她去往敵國(guó)和親汤纸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容