java基礎(chǔ)知識(shí)分享篇
這篇文章就單純的和大家分享一些基礎(chǔ)知識(shí)
每部分內(nèi)容會(huì)重點(diǎn)寫一些常見(jiàn)知識(shí)點(diǎn),方便復(fù)習(xí)和記憶,但并不是全部?jī)?nèi)容。
以下內(nèi)容是看java300集所做的個(gè)人筆記哦

上干貨

1、面向?qū)ο笕筇匦?span id="s0sssss00s" class="font-size-16">
繼承:一般類只能單繼承,內(nèi)部類實(shí)現(xiàn)多繼承,接口可以多繼承
封裝:訪問(wè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)分派)。
2、基本數(shù)據(jù)類型
1. 基本類型位數(shù),自動(dòng)裝箱,常量池。
2. 例如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é)。
3. 基本數(shù)據(jù)類型的包裝類只在數(shù)字范圍-128到127中用到常量池,會(huì)自動(dòng)拆箱裝箱,其余數(shù)字范圍的包裝類則會(huì)新建實(shí)例。
3、String及包裝類
1. String類型是final類型,在堆中分配空間后內(nèi)存地址不可變。
2. 底層是final修飾的char[]數(shù)組,數(shù)組的內(nèi)存地址同樣不可變。
但實(shí)際上可以通過(guò)修改char[n] = 'a'來(lái)進(jìn)行修改,不會(huì)改變String實(shí)例的內(nèi)存值,不過(guò)在jdk中,用戶無(wú)法直接獲取char[],也沒(méi)有方法能操作該數(shù)組。
所以String類型的不可變實(shí)際上也是理論上的不可變。所以我們?cè)诜峙銼tring對(duì)象以后,如果將其 = "abc",那也只是改變了引用的指向,實(shí)際上沒(méi)有改變?cè)瓉?lái)的對(duì)象。
3. StringBuffer和StringBuilder底層是可變的char[]數(shù)組,繼承父類AbstractStringBuilder的各種成員和方法,實(shí)際上的操作都是由父類方法來(lái)完成的。
4、final關(guān)鍵字
1. final修飾基本數(shù)據(jù)類型保證不可變
2. final修飾引用保證引用不能指向別的對(duì)象,否則會(huì)報(bào)錯(cuò)。
3. final修飾類,類的實(shí)例分配空間后地址不可變,子類不能重寫所有父類方法。因此在cglib動(dòng)態(tài)代理中,不能為一個(gè)類的final修飾的函數(shù)做代理,因?yàn)閏glib要將被代理的類設(shè)置為父類,然后再生成字節(jié)碼。
final修飾方法,子類不能重寫該方法。
5、抽象類和接口
1. 抽象類可以有方法實(shí)現(xiàn)。 抽象類可以有非final成員變量。 抽象方法要用abstract修飾。 抽象類可以有構(gòu)造方法,但是只能由子類進(jìn)行實(shí)例化。
2. 接口可以用extends加多個(gè)接口實(shí)現(xiàn)多繼承。 接口只能有public final類型的成員變量。 接口只能有抽象方法,不能有方法體、 接口不能實(shí)例化,但是可以作為引用類型。
6、代碼塊和加載順序
假設(shè)該類是第一次進(jìn)行實(shí)例化。那么有如下加載順序 靜態(tài)總是比非靜態(tài)優(yōu)先,從早到晚的順序是:?
1. 靜態(tài)代碼塊 和 靜態(tài)成員變量的順序根據(jù)代碼位置前后來(lái)決定。
2. 代碼塊和成員變量的順序也根據(jù)代碼位置來(lái)決定 3. 最后才調(diào)用構(gòu)造方法構(gòu)造方法
7、包、內(nèi)部類、外部類
1. Java項(xiàng)目一般從src目錄開(kāi)始有com...A.java這樣的目錄結(jié)構(gòu)。這就是包結(jié)構(gòu)。所以一般編譯后的結(jié)構(gòu)是跟包結(jié)構(gòu)一模一樣的,這樣的結(jié)構(gòu)保證了import時(shí)能找到正確的class引用包訪問(wèn)權(quán)限就是指同包下的類可見(jiàn)。
import 一般加上全路徑,并且使用.*時(shí)只包含當(dāng)前目錄的所有類文件,不包括子目錄。
2. 外部類只有public和default兩種修飾,要么全局可訪問(wèn),要么包內(nèi)可訪問(wèn)。
3. 內(nèi)部類可以有全部訪問(wèn)權(quán)限,因?yàn)樗母拍罹褪且粋€(gè)成員變量,所以訪問(wèn)權(quán)限設(shè)置與一般的成員變量相同。
非靜態(tài)內(nèi)部類是外部類的一個(gè)成員變量,只跟外部類的實(shí)例有關(guān)。
靜態(tài)內(nèi)部類是獨(dú)立于外部類存在的一個(gè)類,與外部類實(shí)例無(wú)關(guān),可以通過(guò)外部類.內(nèi)部類直接獲取Class類型。
8、異常
1. 異常體系的最上層是Throwable類 子類有Error和Exception Exception的子類又有RuntimeException和其他具體的可檢查異常。
2. Error是jvm完全無(wú)法處理的系統(tǒng)錯(cuò)誤,只能終止運(yùn)行。
運(yùn)行時(shí)異常指的是編譯正確但運(yùn)行錯(cuò)誤的異常,如數(shù)組越界異常,一般是人為失誤導(dǎo)致的,這種異常不用try catch,而是需要程序員自己檢查。
可檢查異常一般是jvm處理不了的一些異常,但是又經(jīng)常會(huì)發(fā)生,比如Ioexception,Sqlexception等,是外部實(shí)現(xiàn)帶來(lái)的異常。
3. 多線程的異常流程是獨(dú)立的,互不影響。 大型模塊的子模塊異常一般需要重新封裝成外部異常再次拋出,否則只能看到最外層異常信息,難以進(jìn)行調(diào)試。
日志框架是異常報(bào)告的最好幫手,log4j,slf4j中,在工作中必不可少。
9、泛型
1. Java中的泛型是偽泛型,只在編譯期生效,運(yùn)行期自動(dòng)進(jìn)行泛型擦除,將泛型替換為實(shí)際上傳入的類型。
泛型類用classA {
}
2. 這樣的形式表示,里面的方法和成員變量都可以用T來(lái)表示類型。泛型接口也是類似的,不過(guò)泛型類實(shí)現(xiàn)泛型接口時(shí)可以選擇注入實(shí)際類型或者是繼續(xù)使用泛型。
3. 泛型方法可以自帶泛型比如void <E> go();
泛型可以使用?通配符進(jìn)行泛化 Object可以接受任何類型
也可以使用 這種方式進(jìn)行上下邊界的限制。
10、Class類和Object類
1. Java反射的基礎(chǔ)是Class類,該類封裝所有其他類的類型信息,并且在每個(gè)類加載后在堆區(qū)生成每個(gè)類的一個(gè)Class<類名>實(shí)例,用于該類的實(shí)例化。
2. Java中可以通過(guò)多種方式獲取Class類型,比如A.class,new A().getClass()方法以及Class.forName("com.?.?.A")方法。
3. Object是所有類的父類,有著自己的一些私有方法,以及被所有類繼承的9大方法。
知乎上有人討論Object和Class類型誰(shuí)先加載誰(shuí)后加載,因?yàn)槊總€(gè)類都要繼承Object,但是又得先被加載到堆區(qū),事實(shí)上,這個(gè)問(wèn)題在JVM初始化時(shí)就解決了,沒(méi)必要多想。
今天就分享到這里啦,同學(xué)們別忘記一鍵三連哦!
java300集YYDS(??????)??