Java基礎(chǔ)知識點

數(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):表示對a加1之后的結(jié)果進(jìn)行運算.(先增加后使用)
后置++(a++):表示對a變量加1之前的原始值進(jìn)行計算.(先使用后增加)

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

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

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

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

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

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

單例模式(餓漢式):
必須在該類中;
私有化構(gòu)造器,防止外界通過構(gòu)造器創(chuàng)建新的工具類對象;
向外暴露一個公共靜態(tài)方法用于返回自身的對象;
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ù)據(jù)時:比較兩個對象是否在同一塊內(nèi)存空間(比較的是兩個數(shù)據(jù)內(nèi)存地址是否相等)
equals:
比較的是存儲數(shù)據(jù)是否相等;

BigDecimal加減乘除操作:


image.png

藍(lán)色區(qū)域為乘法和除法按照四舍五入方式保留兩位小數(shù);

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

StringBuffer/StringBuilder區(qū)別:
StringBuffer:中的方法都是用了synchronized修飾,保證了線程安全,但性能較低
StringBuilder:中的方法沒有使用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兩種存儲方式;
List接口:列表,允許記錄添加順序,允許元素重復(fù);
Set接口:不記錄添加順序,不允許元素重復(fù);
Map接口:映射關(guān)系;

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

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

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

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

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


image.png

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

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

訪問修飾符:


image.png

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

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

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

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

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

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

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

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

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

super的使用場景:
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ā)中用來加載資源,加載配置文件等.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末恤批,一起剝皮案震驚了整個濱河市废赞,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖突勇,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異瓷叫,居然都是意外死亡谎砾,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進(jìn)店門韵洋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來竿刁,“玉大人,你說我怎么就攤上這事搪缨∈嘲荩” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵副编,是天一觀的道長负甸。 經(jīng)常有香客問我,道長痹届,這世上最難降的妖魔是什么呻待? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮队腐,結(jié)果婚禮上蚕捉,老公的妹妹穿的比我還像新娘。我一直安慰自己柴淘,他們只是感情好鱼冀,可當(dāng)我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著悠就,像睡著了一般千绪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上梗脾,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天荸型,我揣著相機(jī)與錄音,去河邊找鬼炸茧。 笑死瑞妇,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的梭冠。 我是一名探鬼主播辕狰,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼控漠!你這毒婦竟也來了蔓倍?” 一聲冷哼從身側(cè)響起悬钳,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎偶翅,沒想到半個月后默勾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡聚谁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年母剥,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片形导。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡环疼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出朵耕,到底是詐尸還是另有隱情炫隶,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布憔披,位于F島的核電站等限,受9級特大地震影響爸吮,放射性物質(zhì)發(fā)生泄漏芬膝。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一形娇、第九天 我趴在偏房一處隱蔽的房頂上張望锰霜。 院中可真熱鬧,春花似錦桐早、人聲如沸癣缅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽友存。三九已至,卻和暖如春陶衅,著一層夾襖步出監(jiān)牢的瞬間屡立,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工搀军, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留膨俐,地道東北人。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓罩句,卻偏偏與公主長得像焚刺,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子门烂,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,611評論 2 353