Java基礎(chǔ)知識(shí)點(diǎn)

數(shù)據(jù)類型:
基本數(shù)據(jù)類型:
整數(shù)類型:
byte/short/int/long
小數(shù)類型:
float/double
字符類型:
char
布爾類型:
boolean

引用數(shù)據(jù)類型:
數(shù)組/接口/類

包裝類:
byte Byte
int Integer
short Short
long Long

float Float
double Double

char Character

boolean Boolean

裝箱/拆箱:
裝箱:
將基本類型轉(zhuǎn)換為封裝類型;
拆箱:
將封裝類型轉(zhuǎn)換為基本類型;

自增和自減:
前置++(++a):表示對(duì)a加1之后的結(jié)果進(jìn)行運(yùn)算.(先增加后使用)
后置++(a++):表示對(duì)a變量加1之前的原始值進(jìn)行計(jì)算.(先使用后增加)

Java虛擬機(jī)棧:
簡(jiǎn)稱棧,每當(dāng)方法創(chuàng)建的時(shí)候都會(huì)創(chuàng)建一個(gè)棧幀,用來(lái)存儲(chǔ)局部變量/操作棧/動(dòng)態(tài)鏈接/方法出口等信息.
每當(dāng)調(diào)用一個(gè)方法時(shí)調(diào)用一個(gè)棧幀,存放當(dāng)前方法的局部變量,方法調(diào)用完,該方法的棧幀就被銷毀.

Java堆:
所有線程共享一塊存儲(chǔ)區(qū)域,當(dāng)JVM啟動(dòng)時(shí)創(chuàng)建,所有對(duì)象和數(shù)組都要在堆上分配.
每次使用new關(guān)鍵字,就表示在堆內(nèi)存中開辟一塊新的存儲(chǔ)空間.

成員變量:存放在堆內(nèi),隨著對(duì)象的銷毀而銷毀;
局部變量:存儲(chǔ)在棧內(nèi)存中,隨著方法的調(diào)用結(jié)束而銷毀.

GC垃圾回收機(jī)制:
GC功能可以自動(dòng)監(jiān)測(cè)對(duì)象是否超過(guò)作用域,從而達(dá)到自動(dòng)回收內(nèi)存的目的.
當(dāng)JVM內(nèi)存資源不夠用時(shí),就會(huì)自動(dòng)清理堆中無(wú)用的對(duì)象(沒(méi)有被引用的對(duì)象)所占用的空間.
一般會(huì)自動(dòng)進(jìn)行管理,要請(qǐng)求時(shí)可以調(diào)用system.gc()活RunnTime.getRuntime.gc().

垃圾回收機(jī)制的基本原理:
當(dāng)創(chuàng)建對(duì)象時(shí),GC從就開始監(jiān)控這個(gè)對(duì)象的地址/大小以及使用情況,通常GC使用有向圖的方式進(jìn)行記錄和管理堆中的所有對(duì)象,以此來(lái)確定哪些是"可達(dá)的",哪些是"不可達(dá)的",當(dāng)GC確定"不可達(dá)"時(shí),回收這些內(nèi)存空間.

方法參數(shù)的值傳遞機(jī)制:
傳遞基本類型參數(shù):傳遞參數(shù)值
傳遞引用類型參數(shù):傳遞參數(shù)所引用的堆空間地址值

單例模式(餓漢式):
必須在該類中;
私有化構(gòu)造器,防止外界通過(guò)構(gòu)造器創(chuàng)建新的工具類對(duì)象;
向外暴露一個(gè)公共靜態(tài)方法用于返回自身的對(duì)象;
public class ArrayUtils2{
private ArrayUtils2(){
}
private static ArrayUtils2 instance = new ArrayUtils2();
public static ArrayUtils2 getInstance(){
return instance;
}
}

使用枚舉示例:
public emnu ArrayUtils3{
INSTANCE;
public static void sort(int[] arr){
system.out.println("排序");
}
}

== 和 equals的區(qū)別:
==:
比較基本數(shù)據(jù)類型時(shí):比較兩個(gè)值是否相等
比較對(duì)象數(shù)據(jù)時(shí):比較兩個(gè)對(duì)象是否在同一塊內(nèi)存空間(比較的是兩個(gè)數(shù)據(jù)內(nèi)存地址是否相等)
equals:
比較的是存儲(chǔ)數(shù)據(jù)是否相等;

BigDecimal加減乘除操作:


image.png

藍(lán)色區(qū)域?yàn)槌朔ê统ò凑账纳嵛迦敕绞奖A魞晌恍?shù);

String和StringBuffer/StringBuilder的區(qū)別:
String是不可變字符串;
StringBuffer/StringBuilder是可變字符串;

StringBuffer/StringBuilder區(qū)別:
StringBuffer:中的方法都是用了synchronized修飾,保證了線程安全,但性能較低
StringBuilder:中的方法沒(méi)有使用synchronized修飾,線程不安全,但性能較高

SimpleDateFormat:
格式化(format):Date類型轉(zhuǎn)化為String類型;String format(Date date)
解析(parse):String類型轉(zhuǎn)化為Date類型;Date parse(String str)

Calendar:
日歷類


image.png

ArrayList和LinkedList:
ArrayList:查詢更改較快,新增和刪除較慢.
LinkedList:新增和刪除較快,查詢和更改較慢.

List和Set接口繼承Collection接口,Map接口不繼承Collection接口;


image.png

Collection接口:主要表示List和Set兩種存儲(chǔ)方式;
List接口:列表,允許記錄添加順序,允許元素重復(fù);
Set接口:不記錄添加順序,不允許元素重復(fù);
Map接口:映射關(guān)系;

List接口常用實(shí)現(xiàn)類:
ArrayList類:
數(shù)組列表,表示數(shù)組結(jié)構(gòu),采用數(shù)組實(shí)現(xiàn).
底層是一個(gè)object數(shù)組.
LinkedList類:
鏈表,表示雙向列表和雙向隊(duì)列結(jié)構(gòu).
底層采用鏈表算法,實(shí)現(xiàn)了鏈表/隊(duì)列/棧的數(shù)據(jù)結(jié)構(gòu).
Vector類:
向量,古老的ArrayList.
基于數(shù)組算法實(shí)現(xiàn)的列表,和ArrayList的區(qū)別在于使用了synchronized修飾,線程安全,效率低.
Stack類:
棧,表示棧結(jié)構(gòu),采用數(shù)組實(shí)現(xiàn).
是vector類的子類.擁有后進(jìn)先出特點(diǎn),擁有push(入棧)/pop(出棧)方法.

Set接口常用實(shí)現(xiàn)類:
HashSet類:
底層使用哈希表實(shí)現(xiàn),元素對(duì)象的hashCode值決定了在哈希表中的存儲(chǔ)位置;
當(dāng)旺HashSet集合中添加新的元素對(duì)象時(shí),先會(huì)判斷該對(duì)象和集合中的hashCode值:
不等:直接把這個(gè)對(duì)象存儲(chǔ)到hashCode指定的位置
相等:再繼續(xù)判斷新對(duì)象和集合對(duì)象中的equals作比較
若為true:則視為同一對(duì)象,不保存
若為false:存儲(chǔ)在之前對(duì)象同槽位的鏈表上

TreeSet類:
底層使用紅黑樹實(shí)現(xiàn),可對(duì)集合中元素排序.

HashSet做等值查詢效率高,TreeSet做范圍查詢效率高.

iterator:
迭代器,迭代器中擁有一個(gè)指針,默認(rèn)只想低于個(gè)元素之前
boolean hasNext():判斷指針后是否存在下一個(gè)元素
Object next():獲取指針位置下一個(gè)元素,獲取后指針向后移一位.
Iterator<String> it = list.iterator();
while(it.hasNext()){
String ele = it.next();
System.out.println(ele);
}


image.png

面向?qū)ο筇卣?繼承/封裝/多態(tài)/抽象
抽象:
分兩種 過(guò)程抽象/數(shù)據(jù)抽象,是指忽略一個(gè)主題中與當(dāng)前目標(biāo)無(wú)關(guān)的那些方面,以便更突出當(dāng)前目標(biāo)的方面.
繼承:
子類可以從父類中繼承方法和實(shí)例變量,并且可以修改和增加方法.
Java中類只支持單繼承,但支持多重繼承.(一個(gè)子類只能有一個(gè)父類,但是父類還可以作為子類繼承父類)
多態(tài):
允許不同類的對(duì)象對(duì)同一消息做出響應(yīng).
封裝:
把數(shù)據(jù)和過(guò)程包裝起來(lái).

封裝的好處:
1.保證數(shù)據(jù)的安全性,防止調(diào)用者隨意修改數(shù)據(jù);
2.提高組件的重用性,把公用的方法放到一個(gè)類中,直接調(diào)用即可.

訪問(wèn)修飾符:


image.png

public:表示當(dāng)前類私有,類訪問(wèn)權(quán)限,只能在本類中操作,離開本類不能訪問(wèn);
defult(不寫默認(rèn)):表示當(dāng)前包私有,包訪問(wèn)權(quán)限,定義和調(diào)用只能在同包中才能訪問(wèn);
prodected:表示子類訪問(wèn)權(quán)限,同包中的可以訪問(wèn),即使不同包但是有繼承關(guān)系也可以訪問(wèn);
private:表示公共的,可以在當(dāng)前項(xiàng)目中任何地方訪問(wèn).

JavaBean規(guī)范:
1.類必須使用public修飾
2.必須保證有公共無(wú)參構(gòu)造器,即使手動(dòng)提供了帶參數(shù)的構(gòu)造器,也得手動(dòng)提供無(wú)參數(shù)構(gòu)造器
3.字段使用private修飾,每個(gè)字段提供一對(duì)getter和setter方法

方法重載(overload):
兩同一不同:
兩同:在同一類中,方法名相同
一不同:方法參數(shù)列表不同(參數(shù)類型,參數(shù)個(gè)數(shù),參數(shù)順序)
方法重載的作用:屏蔽同一功能的方法由于參數(shù)不同所造成的方法名稱不同.

方法重寫(override):
子類存在一個(gè)和父類一樣的方法時(shí),稱之為子類覆蓋了父類的方法,也就是重寫;
1.實(shí)例方法簡(jiǎn)明必須相同;
2.子類方法的返回值類型是和父類方法的返回值類型相同或是其子類;
3.子類方法中拋出的異常小于或等于父類方法聲明拋出異常類型;
4.子類方法的訪問(wèn)權(quán)限比父類方法訪問(wèn)權(quán)限更大或相等.

抽象方法:
1.使用abstract修飾的方法,沒(méi)有方法體,留給子類去覆蓋
2.抽象方法必須定義在抽象類或接口中

接口和實(shí)現(xiàn)類的關(guān)系:
接口:定義多個(gè)抽象方法,僅僅定義有哪些功能,卻不提供實(shí)現(xiàn)
實(shí)現(xiàn)類:實(shí)現(xiàn)接口,覆蓋接口中抽象方法,完成具體的實(shí)現(xiàn)

this:
表示當(dāng)前對(duì)象
主要存在于兩個(gè)位置:
在構(gòu)造器中:表示當(dāng)前被創(chuàng)建的對(duì)象
在方法中:哪一個(gè)對(duì)象調(diào)用this所在的方法,此時(shí)this就表示哪一個(gè)對(duì)象

this的使用場(chǎng)景:
1.解決局部變量和成員變量之間的二義性,此時(shí)必須使用
2.同一個(gè)類中非static方法間互調(diào)
3.構(gòu)造器重載的互調(diào)

super:
當(dāng)前對(duì)象的父類對(duì)象

super的使用場(chǎng)景:
1.在子類方法中:調(diào)用父類被覆蓋的方法
2.在子類構(gòu)造器中:調(diào)用父類構(gòu)造器

靜態(tài)代碼塊:
static{
System.out.println("靜態(tài)代碼塊");
}
使用static修飾的初始化代碼塊,當(dāng)該代碼塊的類的字節(jié)碼被加載進(jìn)JVM,就執(zhí)行static代碼塊代碼,在開發(fā)中用來(lái)加載資源,加載配置文件等.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容