1. 程式人生 > >Java基礎,沒事可以看看,夯實一下

Java基礎,沒事可以看看,夯實一下

一、封裝

使用者直接對類內部的屬性進行操作會導致資料的錯誤、混亂或安全性問題。可以通過宣告為private ,再提供get/set 方法進行訪問。

二、過載

在一個類中允許同事存在一個以上同名函式,只要引數個數,引數型別 不同即可。

三、this 關鍵詞

是當前類的一個物件的引用。

四、類的繼承(extends)

子類繼承了父類,就繼承了父類中非私有的屬性和方法。子類中可以使用父類的屬性和方法,也可以建立新的資料和方法。

java 只支援單繼承,不允許多繼承。

-- 一個子類只能有一個父類。

-- 一個父類可以派生出多個子類。

-- 子類不能繼承伺服器的構造方法。

五、訪問控制

Java基礎,沒事可以看看,夯實一下

 

六、重寫

子類可以根據需要對從父類繼承來的方法進行改造(方法的重置/重寫),在程式執行時,子類的方法將覆蓋父類的方法。

覆蓋的方法必須和被覆蓋方法具有相同的方法名、引數列表和返回值。

覆蓋方法不能使用比被覆蓋方法更嚴格的訪問許可權。

七、super 關鍵字

是在子類中對父類的引用。

子類的構造器必須呼叫父類的一個構造器。不顯示呼叫,則預設呼叫父類無參的構造器。

super 和 this 不能同時在一個建構函式中出現。

super 和 this 只能作為建構函式的第一行出現。

八、多型

同樣型別的變數,呼叫同樣的方法,卻產生完全不同的行為。

父類指向子類的引用(父類 = new 子類)。父類呼叫方法,呼叫的將是子類重寫的方法。

例子:

Person p1 = new Man();

p1.walk(); // 呼叫的是子類重寫的方法。

父類多型的情況下(父類指向子類的引用(父類 = new 子類)),父類不能呼叫父類沒有的方法。可以通過強制型別轉換的方式解決此問題。

例子:

Person p1 = new Man();

Man man = (Man) p1;

父類的物件可以轉換為任何子類的型別,但有可能會發生 型別轉換異常。

只能在有父子類關係的情況下才能強制型別轉換。

九、instanceof 操作符

X instanceof A :檢驗X 是否為類A 的物件,返回值為boolean 型。

要求X 所屬的類與類A 必須是父子類關係。否則編譯錯誤。  我剛整理了一套2018最新的0基礎入門和進階教程,無私分享,加Java學習裙 :678-241-563 即可獲取,內附:開發工具和安裝包,以及系統學習路線圖

十、static 關鍵字

static{} 靜態程式碼塊在類載入時執行,並且只執行一次。

十一、單子(singleton)設計模式

採取一定的方法保證在整個軟體系統中,對某個類智慧存在一個物件例項。並且該類只提供了一個取得其物件例項的方法。

構造器私有化。

在該類內部提供一個私有的靜態例項物件。

提供一個get 方法 供外部使用。

例子:

private JavaTest() {}

private static JavaTest javaTest = new JavaTest();

public static JavaTest getJavaTest() {

return javaTest;

}

十二、final 關鍵字

final 可以修飾類,屬性和方法。表示最終的。

final 修飾的屬性,是最終的屬性 - 屬性值不能被修改,即常量。

屬性必須在初始化,或在非靜態程式碼塊,或在構造器中進行初始化。

final 修飾的方法,是最終的方法 - 該方法不能被修改 - 該方法不能被重寫。

final 修飾的類,是最終的類 - 該類不能被擴充套件 - 該類不能被繼承。

十三、抽象類(abstract)

用於修飾方法 和 類。

abstract 修飾的方法: 沒有方法體,只有方法宣告。

abstract 修飾的類 : 抽象類,不能被例項化。抽象類是用來被繼承的,抽象類的子類必須重寫父類的抽象方法,並提供方法體。

有抽象方法的類一定是抽象類,但抽象類中可以沒有抽象方法。

不能用abstract 修飾私有方法,構造方法,靜態方法。

十四、介面(interface)

介面是抽象方法和常量的定義集合。

介面是一種特殊的抽象類,介面中只能包含常量和方法的定義,而沒有變數和方法的實現。

介面中所有的成員變數預設由public static final 修飾。

介面中所有的方法都預設由public abstract 修飾。介面中沒有構造方法。

實現介面的類必須提供介面中所有方法的具體實現。

介面允許多實現。一個類可以實現多個介面。

介面與實現類之間存在多型性。

介面可以繼承另一個介面。

十五、內部類

在類的內部定義的一個類。相當於一個類的內部成員。

在類的外部可以訪問該類的內部類。

靜態內部類中的方法不能訪問外部類的非靜態物件。

十六、異常

java 中,將程式執行中發生的不正常情況稱為“異常”。

java 中的異常用於處理非預期的情況,如檔案沒找到,網路錯誤,非法引數等。

java 程式執行過程中所發生的異常事件可分為兩類:

Error : JVM 系統內部錯誤、資源耗盡等嚴重情況。

Exception : 其他因程式設計錯誤或偶然的外在因素導致的一般問題。如空指標訪問,試圖讀取不存在的檔案,網路連線中斷。

自定義異常:

public class JavaTest extends RuntimeException {

public JavaTest() {

}

public JavaTest(String msg) {

super(msg);

}

}

十七、集合

java 集合可以分為Set 、List 、Map 三種體系。

-- Set : 無序,不可重複的集合。

-- List : 有序,可重複的集合。

-- Map : 具有對映關係的集合。

1. Collection 介面

Collection 介面是 List ,Set 和 Queue 介面的父介面。該接口裡定義的方法即可用於操作Set 集合,也可用於操作List和Queue 集合。

Collection 中無法獲取指定元素,但可以遍歷所有元素。

2. Set 集合

Set 集合不允許包含相同的元素,Set 判斷兩個物件是否相同不用==運算子,而是根據equals 方法。

(1) HashSet 是Set 介面的典型實現,大多時候使用Set 集合時都使用這個實現類。

HashSet 按照Hash 演算法來儲存集合中的元素,因此具有很好的儲存和查詢功能。

HashSet 具有以下特點:

-- 不能保證元素的排列順序。

-- HashSet 不是執行緒安全的。

-- 集合元素可以使用 null 。

(2) LinkedHashSet 是HashSet 的子類。

LinkedHashSet 集合根據元素的hashCode 值來確定元素的儲存位置。但它同時使用連結串列維護元素的次序,這使得元素看起來是以插入順序儲存的。

LinkedHashSet 效能插入效能略低於HashSet ,但在迭代訪問Set 裡全部元素時有很好的效能。

LinkedHashSet 不允許集合元素重複。

(3) TreeSet

Ⅰ. TreeSet 是SortedSet 介面的實現類,TreeSet 可以確保集合元素處於排序狀態。

預設情況下 TreeSet 要求集合中的元素必須實現Comparable 介面。

Comparable 中只有一個方法 : public int compareTo(Object o)

若返回0 代表兩個元素相等; 若返回整數,則代表當前元素大; 若返回負數,則代表當前元素小。

TreeSet 用 Iterator 遍歷。

Iterator it = set.iterator();

for(;it.hasNext();){

System.out.println(it.next());

}

 

 

Ⅱ. TreeSet 支援兩種排序方法:自然排序 和 定製排序。預設情況下,TreeSet 採用自然排序。

自然排序:

因為只有相同類的兩個例項才會比較大小,所以向TreeSet 中新增的應該是一個類的物件。

當需要把一個物件放入到TreeSet 中,重寫該物件的equals 方法時,應保證該方法與compareTo(Object obj)方法有一致的結果:如果兩個物件通過equals() 方法比較返回true,則通過compareTo(Object obj) 方法比較應返回 0 。

定製排序:

傳入的物件不用實現Comparable 介面,但是在建立TreeSet 時需要傳入一個Comparable 的實現類。使實體類更簡潔。

TreeSet set = new TreeSet(new Comparable (){ });

3. List

List 代表一個元素有序,且重複的集合,集合中的每個元素都有其對應的順序索引。

List 允許使用重複的元素,可以通過索引來訪問指定位置的集合元素。

List 預設按元素的新增順序設定元素的索引。

List 集合裡添加了一些根據索引來操作幾個元素的方法。

 

 

List 額外提供了一個 listlterator() 方法,該方法返回一個Listlterator 物件,ListIterator 介面繼承了Iterator 介面,提供了專門操作List 的方法:

 

 

Ⅰ. ArrayList 和 Vector

ArrayList 和 Vector 是List 介面的兩個典型實現。

區別:

1. 是一個古老的集合,通常建議使用ArrayList 。

2. ArrayList 是執行緒不安全的,而Vector 是執行緒安全的。

3. 即使為保證List 集合執行緒安全,也不推薦使用Vector 。

Arrays.asList(...) 方法返回的List 集合既不是ArrayList 例項,也不是Vector 例項。Arrays.asList(...) 返回值是一個固定長度的List 集合。

4. Map

Map 用於儲存具有對映關係的資料,因此Map 集合裡儲存著兩組值,一組用於儲存Map 裡的Key ,另外一組用於儲存Map 裡的Value。

Map 中的key 和 value 都可以是任何引用型別的資料。

Map 中的Key 不允許重複,即同一個Map 物件的任何兩個Key 通過equals 方法比較都返回false 。

key 和 Value 之間存在單向一對一關係,即通過指定的Key 總能找到唯一的,確定的Value 。

5. HashMap 和 HashTable

HashMap 和 Hashtable 是Map 介面的兩個典型實現類。

區別:

HashTable 是一個古老的Map 實現類,不建議使用。

HashTable 是一個執行緒安全的Map 實現,但HashMap 是執行緒不安全的。

HashTable 不允許使用null 作為key 和 value ,而HashMap 可以。

與HashSet 集合不能保證元素的順序一樣,HashTable、HashMap 也不能儲存其中key-value 的順序。

HashTable 、HashMap 判斷兩個key 相等的標準是:兩個key 通過equals 方法返回true,HashCode 值也相等。

HashTable 、HashMap 判斷兩個Value 相等的標準是:兩個Value 通過equals 方法返回true 。

6. LinkedHashMap

LinkedHashMap 是HashMap 的子類。

LinkedHashMap 可以維護Map 的迭代順序:迭代順序與key-value 對的插入順序一致。

7.TreeMap

TreeMap 儲存key-value 時,需要根據key 對key-value 進行排序。TreeMap 可以保證所有的key-value 處於有序順序。

TreeMap 的Key 排序:

自然排序:TreeMap 的所有key必須實現Comparable 介面,而且所有的key 應該是同一個類的物件,否則將會丟擲ClassCastException 。

定製排序:建立TreeMap 時,傳入一個Comparator 物件,該物件負責對TreeMap 中的所有key 進行排序。此時不需要Map 的Key 實現Comparable 介面。

8. Properties

Properties 類是HashTable 的子類,該物件用於處理屬性檔案。

由於屬性檔案裡的key 、value 都是字串型別,所以properties 裡的key 和 value 都是字串型別的。

Properties pro = new Properties();

InputStream in = this.class.getClassLoader().getResourceAsStream("jdbc.properties"); // 通過類載入器獲得jdbc檔案的輸入流

pro.load(in);

String user = pro.getProperties("user");

9. Collections 工具類

Collections 是一個操作Set 、List 和 Map 等集合的工具類。

Collections 中提供了大量方法對集合元素進行排序、查詢和修改等操作,還提供了對集合物件設定不可變燉對集合物件實現同步控制等方法。

排序操作:

Java基礎,沒事可以看看,夯實一下

 

10. Enumeration

Enumeration 介面是Iterator 迭代器的“古老版本”