Java基礎,沒事可以看看,夯實一下
一、封裝
使用者直接對類內部的屬性進行操作會導致資料的錯誤、混亂或安全性問題。可以通過宣告為private ,再提供get/set 方法進行訪問。
二、過載
在一個類中允許同事存在一個以上同名函式,只要引數個數,引數型別 不同即可。
三、this 關鍵詞
是當前類的一個物件的引用。
四、類的繼承(extends)
子類繼承了父類,就繼承了父類中非私有的屬性和方法。子類中可以使用父類的屬性和方法,也可以建立新的資料和方法。
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 中提供了大量方法對集合元素進行排序、查詢和修改等操作,還提供了對集合物件設定不可變燉對集合物件實現同步控制等方法。
排序操作:
10. Enumeration
Enumeration 介面是Iterator 迭代器的“古老版本”