Java技術(shù)學(xué)習(xí)核心總結(jié)

Java技術(shù)學(xué)習(xí)核心總結(jié)

深圳達(dá)內(nèi)教育      2022-05-04 04:56:01     91

Java技術(shù)學(xué)習(xí)核心總結(jié),Java基礎(chǔ)學(xué)習(xí)總結(jié)每部分內(nèi)容會(huì)重點(diǎn)寫一些常見知識(shí)點(diǎn),方便復(fù)習(xí)和記憶,但是并不是全部?jī)?nèi)容,詳細(xì)的內(nèi)容請(qǐng)參見具體的文章地址。面

課程價(jià)格 請(qǐng)咨詢

上課時(shí)段: 授課校區(qū):

詳細(xì)介紹

  • Java基礎(chǔ)學(xué)習(xí)總結(jié)

  • 每部分內(nèi)容會(huì)重點(diǎn)寫一些常見知識(shí)點(diǎn),方便復(fù)習(xí)和記憶,但是并不是全部?jī)?nèi)容,詳細(xì)的內(nèi)容請(qǐng)參見具體的文章地址。

面向?qū)ο笕筇匦?/h2>
  • 繼承:一般類只能單繼承,內(nèi)部類實(shí)現(xiàn)多繼承,接口可以多繼承
  • 封裝:訪問權(quán)限控制public>protected>包>private內(nèi)部類也是一種封裝
  • 多態(tài):編譯時(shí)多態(tài),體現(xiàn)在向上轉(zhuǎn)型和向下轉(zhuǎn)型,通過(guò)引用類型判斷調(diào)用哪個(gè)方法(靜態(tài)分派)。
  • 運(yùn)行時(shí)多態(tài),體現(xiàn)在同名函數(shù)通過(guò)不同參數(shù)實(shí)現(xiàn)多種方法(動(dòng)態(tài)分派)。

基本數(shù)據(jù)類型

  • 基本類型位數(shù),自動(dòng)裝箱,常量池
  • 例如byte類型是1byte也就是8位,可以表示的數(shù)字是-128到127,因?yàn)檫€有一個(gè)0,加起來(lái)一共是256,也就是2的八次方。
  • 32位和64位機(jī)器的int是4個(gè)字節(jié)也就是32位,char是1個(gè)字節(jié)就是8位,float是4個(gè)字節(jié),double是8個(gè)字節(jié),long是8個(gè)字節(jié)。
  • 所以它們占有字節(jié)數(shù)是相同的,這樣的話兩個(gè)版本才可以更好地兼容。(應(yīng)該)
  • 基本數(shù)據(jù)類型的包裝類只在數(shù)字范圍-128到127中用到常量池,會(huì)自動(dòng)拆箱裝箱,其余數(shù)字范圍的包裝類則會(huì)新建實(shí)例

String及包裝類

  • String類型是final類型,在堆中分配空間后內(nèi)存地址不可變。

  • 底層是final修飾的char[]數(shù)組,數(shù)組的內(nèi)存地址同樣不可變。
  • 但實(shí)際上可以通過(guò)修改char[n]='a'來(lái)進(jìn)行修改,不會(huì)改變String實(shí)例的內(nèi)存值,不過(guò)在jdk中,用戶無(wú)法直接獲取char[],也沒有方法能操作該數(shù)組。
  • 所以String類型的不可變實(shí)際上也是理論上的不可變。所以我們?cè)诜峙銼tring對(duì)象以后,如果將其="abc",那也只是改變了引用的指向,實(shí)際上沒有改變?cè)瓉?lái)的對(duì)象。
  • StringBuffer和StringBuilder底層是可變的char[]數(shù)組,繼承父類AbstractStringBuilder的各種成員和方法,實(shí)際上的操作都是由父類方法來(lái)完成的。

final關(guān)鍵字

  • final修飾基本數(shù)據(jù)類型保證不可變

  • final修飾引用保證引用不能指向別的對(duì)象,否則會(huì)報(bào)錯(cuò)。
  • final修飾類,類的實(shí)例分配空間后地址不可變,子類不能重寫所有父類方法。因此在cglib動(dòng)態(tài)代理中,不能為一個(gè)類的final修飾的函數(shù)做代理,因?yàn)閏glib要將被代理的類設(shè)置為父類,然后再生成字節(jié)碼。
  • final修飾方法,子類不能重寫該方法。

抽象類和接口 

  • 抽象類可以有方法實(shí)現(xiàn)。
  • 抽象類可以有非final成員變量。
  • 抽象方法要用abstract修飾。
  • 抽象類可以有構(gòu)造方法,但是只能由子類進(jìn)行實(shí)例化。
  • 接口可以用extends加多個(gè)接口實(shí)現(xiàn)多繼承。
  • 接口只能有public final類型的成員變量。
  • 接口只能有抽象方法,不能有方法體、
  • 接口不能實(shí)例化,但是可以作為引用類型。

代碼塊和加載順序

  • 假設(shè)該類是第一次進(jìn)行實(shí)例化。那么有如下加載順序

  • 靜態(tài)總是比非靜態(tài)優(yōu)先,從早到晚的順序是:
  • 靜態(tài)代碼塊和靜態(tài)成員變量的順序根據(jù)代碼位置前后來(lái)決定。
  • 代碼塊和成員變量的順序也根據(jù)代碼位置來(lái)決定
  • 最后才調(diào)用構(gòu)造方法構(gòu)造方法

多線程

  • 這里先不講juc包里的多線程類。juc相關(guān)內(nèi)容會(huì)在Java并發(fā)專題講解。

  • 線程的實(shí)現(xiàn)可以通過(guò)繼承Thread類和實(shí)現(xiàn)Runable接口
  • 也可以使用線程池。callable配合future可以實(shí)現(xiàn)線程中的數(shù)據(jù)獲取。
  • Java中的線程有7種狀態(tài),new runable running blocked waiting time_waiting terminate
  • blocked是線程等待其他線程鎖釋放。
  • waiting是wait以后線程無(wú)限等待其他線程使用notify喚醒
  • time_wating是有限時(shí)間地等待被喚醒,也可能是sleep固定時(shí)間。
  • Thread的join是實(shí)例方法,比如a.join(b),則說(shuō)明a線程要等b線程運(yùn)行完才會(huì)運(yùn)行。
  • o.wait方法會(huì)讓持有該對(duì)象o的線程釋放鎖并且進(jìn)入阻塞狀態(tài),notify則是持有o鎖對(duì)象的線程通知其他等待鎖的線程獲取鎖。notify方法并不會(huì)釋放鎖。注意這兩個(gè)方法都只能在synchronized同步方法或同步塊里使用。
  • synchronized方法底層使用系統(tǒng)調(diào)用的mutex鎖,開銷較大,jvm會(huì)為每個(gè)鎖對(duì)象維護(hù)一個(gè)等待隊(duì)列,讓等待該對(duì)象鎖的線程在這個(gè)隊(duì)列中等待。當(dāng)線程獲取不到鎖時(shí)則讓線程阻塞,而其他檢查notify以后則會(huì)通知任意一個(gè)線程,所以這個(gè)鎖時(shí)非公平鎖。
  • Thread.sleep(),Thread.interrupt()等方法都是類方法,表示當(dāng)前調(diào)用該方法的線程的操作。
  • 一個(gè)線程實(shí)例連續(xù)start兩次會(huì)拋異常,這是因?yàn)榫€程start后會(huì)設(shè)置標(biāo)識(shí),如果再次start則判斷為錯(cuò)誤。

以上就是深圳達(dá)內(nèi)教育小編介紹的"Java技術(shù)學(xué)習(xí)核心總結(jié)",希望對(duì)大家有幫助,如有疑問,請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為您服務(wù)。 

培訓(xùn)啦提醒您:交易時(shí)請(qǐng)核實(shí)對(duì)方資質(zhì),對(duì)于過(guò)大宣傳或承諾需謹(jǐn)慎!任何要求預(yù)付定金、匯款等方式均存在風(fēng)險(xiǎn),謹(jǐn)防上當(dāng)。