1.java的8個基本數據類型?
????????整型: byte(占用1個字節) short(占用2個字節) int(占用4個字節) long(占用8個字節)
????????浮點型: float(占用4個字節)、double(占用8個字節) 字符型: char
????????布爾型: boolean
2.ArrayList和LinkedList的區別?
????????可以說ArrayList和LinkedList除了是同屬于集合類,其他都是不同的,因為他們本身的實現是兩種不同的實現方式,ArrayList 維護的是一個動態數組,LinkedList維護的是一個雙向鏈表,而他們之間的不同是數組與鏈表的特性比較
往集合中間插入數據時ArrayList比linkedList慢,ArrayList正好擴容的時候添加數據要比LinkedList慢,查詢數據ArrayList更快
3.HashMap是否是線程安全的? HashMap的底層原理?
????HashMap是線程不安全的,HashTable、ConcurrentHashMap是線程安全的 HashMap是基于哈希表的Map接口的非同步實現。 HashMap底層就是一個數組結構,數組中的每一項又是一個鏈表。數組+鏈表結構,新建一個HashMap的時候,就會初始化一個數組。Entry就是數組中的元素,每個Entry其實就是一個key-value的鍵值對,它持有一個指向下一個元素的引用,這就構成了鏈表,HashMap底層將key-value當成一個整體來處理,這個整體就是一個Entry對象。當需要存儲一個Entry對象時,會根據hash算法來決定在其數組中的位置,在根據equals方法決定其在該數組位置上的鏈表中的存儲位置;當需要取出一個Entry對象時,也會根據hash算法找到其在數組中的存儲位置, 在根據equals方法從該位置上的鏈表中取出Entry。JDK1.8做出了改變,使用 數組 + 鏈表 + 紅黑樹 的結構。當節點數不大于8時,還是一個鏈表結構,只不過插入節點時變成了 尾插法 ,當節點數大于8后,將從鏈表結構轉化成紅黑樹結構
4.成員變量和局部變量的區別?
???1)所在位置: 局部變量:在每個方法內部使用,出了方法不可用 成員變量:屬于每個類,在方法的外部,描述類的屬性
???2)作用范圍: 局部變量:作用在方法內部 成員變量:作用于每個類
???3)默認值: 局部變量:聲明之后系統不會賦予默認值,必須自己手動賦值,否則會報錯 成員變量:系統會根據該變量的類型賦予其相應的特征值,不手動賦值,也不會報錯
???4)所在內存位置不一樣: 成員變量是在對象創建以后存在于堆中,對象回收時,成員變量消失 局部變量是在方法被調用時存在于棧中,方法調執行結束,從棧中清除
???5)生命周期不同: 成員變量:隨對象的創建而創建,對象回收時,成員變量消失 局部變量:隨著方法的調用被創建,方法執行結束后,從棧中清除
5.說說重載與重寫的區別?
???【1】定義的位置不同:重載方法必須在同一個類中定義,而重寫方法必須在子類中定義。
???【2】方法名和參數列表不同:重載方法的方法名相同但參數列表不同,而重寫方法的方法名和參數列表必須與父類相同。
???【3】返回類型不同:重載方法的返回類型可以不同,而重寫方法的返回類型必須相同或是其子類。
? ? 【4】目的不同:重載的目的是為了提高代碼的可讀性和簡潔性,而重寫的目的是為了在子類中靈活地修改父類的行為。
6.java中String字符串類中的常用方法?
? ?charAt ? ? 根據下標獲取對應位置字符、
? ?contains ? 判斷一個字符串中是否包含某個字符串,返回值為boolean類型、
? ?equals ? ? 判斷兩個字符串內容是否相等、
? ?indexOf ? ?根據字符串獲取在字符串中的下標,如果不存在返回-1、
? ?length ? ? 獲取字符串的長度
? ?replace ? ?替換字符串、
? ?split ? ? ?根據分隔符拆分字符串,返回值為數組、
? ?substring ?根據下標截取字符串
7.面向對象的三大特征:封裝,繼承,多態
????????1.封裝:是指隱藏對象的屬性和實現細節,僅對外提供公共訪問方式。
?????????????????1)將屬性進行私有化(private)【不能直接修改屬性】
???????????????? 2)提供公共的(public)set/get方法,對數據進行判斷并賦值 a. 提供“set變量名(參數)”方法,用于設置成員變量的值,方法用public修飾 b. 提供“get變量名()”方法,用于獲取成員變量的值,方法用public修飾
????????????????3)提供相應的構造器/構造方法,與set/get方法結合
? ? ? ? 2.繼承:通過extends xxx實現,就是子類繼承父類的屬性和行為,使得子類對象具有與父類相同的屬性、相同的行為。子類可以直接訪問父類中的非私有的屬性和行為。
? ? ? ? 3.多態:父類引用指向子類對象。
8.static關鍵字的使用
靜態屬性
????????被static修飾的屬性叫靜態屬性(類變量),static修飾的變量,不屬于某一個類,是共享的。不需要new對象就能調用。
靜態方法
????????①、靜態方法中,只能調用靜態的方法或屬性。(在靜態方法中,不能使用this關鍵字,super關鍵字)
????????②、靜態方法隨著類的加載而加載。可以通過“類.靜態方法”的方式調用
靜態代碼塊
????????代碼塊的作用:用來初始化類、對象
靜態內部類
????????Java允許將類A聲明在類B中,類A就是內部類,類B為外部類
????????內部類作為外部類的成員,可以調用外部類的結構,可以用static修飾(外部類不能用static修飾)
9.Java中構造方法是什么,用途是什么?
在Java中,構造方法是一種特殊類型的方法,用于創建對象時初始化對象的實例變量。構造方法的作用如下:
????????1. 創建對象:構造方法用于創建對象的實例。當使用new關鍵字創建一個對象時,會調用該對象對應的構造方法,并在構造方法中進行必要的初始化操作。
????????2. 初始化實例變量:構造方法用于初始化對象的實例變量。通過在構造方法中為對象的實例變量賦初值,確保對象在創建時具備合法的初始狀態。
????????3. 處理對象的初始化邏輯:構造方法可以包含任意邏輯和代碼,用于處理對象的初始化邏輯。例如,可以在構造方法中進行計算、調用其他方法等操作,以確保對象在創建后能夠滿足特定需求。
????????4. 提供重載的構造方法:可以定義多個構造方法,通過不同的參數列表來實現方法的重載。這樣可以在創建對象時根據不同的參數選擇不同的構造方法,以滿足不同的需求。
問題:什么是構造方法?
和類名相同,不寫返回值的方法,在創建對象時會調用構造方法,用于給屬性賦值/初始化一些配置信息等
問題:靜態代碼塊和構造方法哪個先執行
靜態代碼塊
問題:構造方法可以被繼承嗎
不能
10.java中的this關鍵字
? ? ? ? this用于引用當前對象的實例,調用本類中的成員變量,其他方法,和本類中的其他構造方法。
11.Java的多線程中的synchronized
synchronized中文意思是同步,也稱之為“同步鎖”。
synchronized的作用是保證在同一時刻, 被修飾的代碼塊或方法只會有一個線程執行,以達到保證并發安全的效果。
Synchronized修飾一個方法很簡單,就是在方法的前面加synchronized,synchronized修飾方法和修飾一個代碼塊類似,只是作用范圍不一樣,修飾代碼塊是大括號括起來的范圍,而修飾方法范圍是整個函數。
方式1:同步方法
public synchronized void method()
{
? ?// todo
}
方式2: 同步代碼塊
public void method()
{
? ?synchronized(this) {
? ? ? // todo
? ?}
}