JAVA基礎複習

基本類型
JAVA有8大基本數據類型:整型(byte、short、int、long),浮點類型(float、double),char,boolean

存儲需求:
整型:
byte:1個字節
short:2個字節
int:4個字節
long:8個字節

浮點類型:
float:4個字節
double:8個字節

char:2個字節
boolean:1個字節

字符串
字符串屬於引用類型,是不可變的,每次操作字符串都需要創建新的對象
常用方法:
indexOf():返回指定字符的索引。
charAt():返回指定索引處的字符。
replace():字符串替換。
trim():去除字符串兩端的空白。
split():分割字符串,返回一個分割後的字符串數組。
getBytes():將字符串轉化爲字節數組。
length():返回字符串長度。
substring():截取字符串。
equals():字符串比較。

StringBuilder和StringBuffer:
由於字符串是不可變的,所以需要改變字符串的內容時需使用StringBuilder或StringBuffer,StringBuffer效率比StringBuilder低,但是在多線程下安全,而StringBuilder在多線程下不安全。因此在單線程下用StringBuilder,在多線程下用StringBuffer,兩者的方法都是相同的。

數組
數組屬於引用類型,用於存儲同一類型值的集合。數組有length屬性可以獲取數組的長度(需要與String的length()方法區分)

Arrays是java.util包下操作數組的工具類
常用方法:
toString:轉成字符串輸出
copeof:複製數組
sort:採用快速排序算法對數組進行排序
binarySearch:纔有二分搜索算法查找數組中元素的位置
equals:判斷是否相等

方法的重載:
方法的重載是讓類以統一的方法處理不同數據類型的一種手段,多個同名函數同時存在,具有不同的參數類型,方法的返回值可以相同也可以不同。
方法的重寫:
子類重寫父類的方法,方法名、返回類型和參數都相同。

面向對象
面向對象(OOP)的思想就是把世間的事物都看作是對象,根據具體的問題,把對象抽象成類,給類設計具體的屬性和方法。
面向對象的三大特徵:
封裝:隱藏對象的屬性和實現細節,僅對外提供公共訪問方式
繼承:子類可以繼承父類的公有屬性和方法,提高了代碼的複用性
多態:在同一個方法中,同一個類型的不同對象呈現出不同的行爲,父類引用可以指向子類的對象。
比如一個方法需要傳遞子類對象,沒有多態時,那麼就需要針對每一個子類寫多個方法,有多態就可以直接用父類引用接收。

繼承的特點
每個類只能有一個直接的父類,子類可以繼承父類公有的屬性和方法

方法參數的傳遞方式
JAVA的參數傳遞的方式只有一種:值傳遞。
但是由於基本數據類型傳遞的是值,引用數據類型傳遞的是地址,因此當方法內引用數據類型的值發生改變時,會對方法外的引用類型的值造成影響。

static修飾符的用法
1、修飾成員變量:類變量,與對象無關
2、修飾方法:類方法,可以用類名.方法名的方式調用方法
3、靜態初始化塊:系統將在類初始化階段就加載靜態代碼塊,而不是在創建對象時加載。
4、靜態內部類

final修飾符的用法
1、final 修飾的類叫最終類,該類不能被繼承。
2、final 修飾的方法不能被重寫。
3、final 修飾的變量叫常量,常量必須初始化,初始化之後值就不能被修改。

不可變類
8個包裝類型和String類型都是不可變類,即創建實例之後,該實例的實例變量是不可改變的。

內部類
內部類的作用:
1、內部類提供了更好的封裝,可以把內部類隱藏在外部類中,不允許同一個包下的其他類訪問該類。
2、內部類成員可以訪問外部類的私有成員,但是外部類不能直接訪問內部類的實現細節(成員變量)。
3、匿名內部類適合創建僅使用一次的類。

非靜態內部類
內部類可以訪問外部類的私有成員,但是外部類不能直接直接訪問內部類成員,需要創建內部類對象之後才能訪問成員。
靜態內部類
由於靜態成員不能訪問非靜態成員,靜態內部類不能訪問外部類的實例成員,只能訪問類成員。
匿名內部類
創建匿名內部類會立即創建一個該類的實例,這個類的定義立即消失,匿名內部類不能重複使用。

抽象類
1、抽象類和抽象方法必須用abstract修飾符來修飾,抽象方法不能有方法體
2、抽象類無法被實例化
3、有抽象方法的類只能被定義成抽象類,抽象類中可以沒有抽象方法

作用:可以作爲子類的模板,子類可以在抽象類的基礎上進行擴展

接口
作用:接口使得規範和實現分離,接口定義了某一批類需要遵守的規範,不需要關心方法的實現細節,只需讓這批類實現接口的方法,讓各組件面向接口耦合,提高了擴展性。

接口和抽象類有什麼區別?
實現:抽象類的子類使用 extends 來繼承;接口必須使用 implements 來實現接口。
構造函數:抽象類可以有構造函數;接口不能有。
實現數量:類可以實現很多個接口,但是隻能繼承一個抽象類。
訪問修飾符:接口中的方法默認使用 public 修飾;抽象類中的方法可以是任意訪問修飾符。

泛型
Java的參數化類型被稱爲泛型,泛型就是允許在定義類、接口、方法時使用類型形參,這個類型形參將在聲明時動態的指定。泛型解決了用Object接收對象之後強制類型轉換可能出現的異常,存儲的是什麼類型,取出的就是什麼類型。

JAVA容器

JAVA容器的類型
collection:用於存儲相同類型的對象
map:用於保存具有映射關係的數據
在這裏插入圖片描述
ArrayList 和 LinkedList 的區別是什麼?
ArrayList底層是數組,訪問元素時間複雜度是O(1),插入、刪除元素的時間複雜度是O(n)。
LinkedList底層是雙向鏈表,訪問時間複雜度是O(n),插入、刪除元素的時間複雜度是O(1);

Array 和 ArrayList 有何區別?
Array可以容納基本類型和對象,而ArrayList只能容納對象。
Array是指定大小的,而ArrayList大小是不固定的。
Array沒有提供ArrayList那麼多功能,比如addAll、removeAll和iterator等。

List和Set的區別?
List的元素可重複,Set的元素不可重複
List集合有序,可以通過索引訪問元素
Set集合無序。

HashMap和TreeMap的區別?
HashMap底層是哈希表,哈希表是一個鏈式數組(存儲鏈表的數組)。當我們往Hashmap中put元素時,首先根據key的hashcode重新計算hash值,根據hash值得到這個元素在數組中的位置(下標),如果該數組在該位置上已經存放了其他元素,那麼在這個位置上的元素將以鏈表的形式存放(拉鍊法解決衝突)。jdk1.8之後,當鏈表中的節點數據超過八個之後,該鏈表會轉爲紅黑樹來提高查詢效率。
TreeMap底層是紅黑樹,紅黑樹是自平衡的二叉查找樹,查找、插入、刪除的時間複雜度都是O(lg(n))

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章