1、封裝java
使用者直接對類內部的屬性進行操做會致使數據的錯誤、混亂或安全性問題。能夠經過聲明爲private ,再提供get/set 方法進行訪問。算法
2、重載編程
在一個類中容許同事存在一個以上同名函數,只要參數個數,參數類型 不一樣便可。設計模式
3、this 關鍵詞安全
是當前類的一個對象的引用。服務器
4、類的繼承(extends)網絡
子類繼承了父類,就繼承了父類中非私有的屬性和方法。子類中可使用父類的屬性和方法,也能夠建立新的數據和方法。函數
java 只支持單繼承,不容許多繼承。工具
-- 一個子類只能有一個父類。性能
-- 一個父類能夠派生出多個子類。
-- 子類不能繼承服務器的構造方法。
5、訪問控制
Java基礎,沒事能夠看看,夯實一下
6、重寫
子類能夠根據須要對從父類繼承來的方法進行改造(方法的重置/重寫),在程序執行時,子類的方法將覆蓋父類的方法。
覆蓋的方法必須和被覆蓋方法具備相同的方法名、參數列表和返回值。
覆蓋方法不能使用比被覆蓋方法更嚴格的訪問權限。
7、super 關鍵字
是在子類中對父類的引用。
子類的構造器必須調用父類的一個構造器。不顯示調用,則默認調用父類無參的構造器。
super 和 this 不能同時在一個構造函數中出現。
super 和 this 只能做爲構造函數的第一行出現。
我剛整理了一套2018最新的0基礎入門和進階教程,無私分享,加Java學習裙 :678-241-563 便可獲取,內附:開發工具和安裝包,以及系統學習路線圖
8、多態
一樣類型的變量,調用一樣的方法,卻產生徹底不一樣的行爲。
父類指向子類的引用(父類 = new 子類)。父類調用方法,調用的將是子類重寫的方法。
例子:
Person p1 = new Man();
p1.walk(); // 調用的是子類重寫的方法。
父類多態的狀況下(父類指向子類的引用(父類 = new 子類)),父類不能調用父類沒有的方法。能夠經過強制類型轉換的方式解決此問題。
例子:
Person p1 = new Man();
Man man = (Man) p1;
父類的對象能夠轉換爲任何子類的類型,但有可能會發生 類型轉換異常。
只能在有父子類關係的狀況下才能強制類型轉換。
9、instanceof 操做符
X instanceof A :檢驗X 是否爲類A 的對象,返回值爲boolean 型。
要求X 所屬的類與類A 必須是父子類關係。不然編譯錯誤。
10、static 關鍵字
static{} 靜態代碼塊在類加載時執行,而且只執行一次。
11、單子(singleton)設計模式
採起必定的方法保證在整個軟件系統中,對某個類智能存在一個對象實例。而且該類只提供了一個取得其對象實例的方法。
構造器私有化。
在該類內部提供一個私有的靜態實例對象。
提供一個get 方法 供外部使用。
例子:
private JavaTest() {}
private static JavaTest javaTest = new JavaTest();
public static JavaTest getJavaTest() {
return javaTest;
}
分享個不錯的學習交流q-u-n 678-241-563視頻資料免費分享
12、final 關鍵字
final 能夠修飾類,屬性和方法。表示最終的。
final 修飾的屬性,是最終的屬性 - 屬性值不能被修改,即常量。
屬性必須在初始化,或在非靜態代碼塊,或在構造器中進行初始化。
final 修飾的方法,是最終的方法 - 該方法不能被修改 - 該方法不能被重寫。
final 修飾的類,是最終的類 - 該類不能被擴展 - 該類不能被繼承。
十3、抽象類(abstract)
用於修飾方法 和 類。
abstract 修飾的方法: 沒有方法體,只有方法聲明。
abstract 修飾的類 : 抽象類,不能被實例化。抽象類是用來被繼承的,抽象類的子類必須重寫父類的抽象方法,並提供方法體。
有抽象方法的類必定是抽象類,但抽象類中能夠沒有抽象方法。
不能用abstract 修飾私有方法,構造方法,靜態方法。
十4、接口(interface)
接口是抽象方法和常量的定義集合。
接口是一種特殊的抽象類,接口中只能包含常量和方法的定義,而沒有變量和方法的實現。
接口中全部的成員變量默認由public static final 修飾。
接口中全部的方法都默認由public abstract 修飾。接口中沒有構造方法。
實現接口的類必須提供接口中全部方法的具體實現。
接口容許多實現。一個類能夠實現多個接口。
接口與實現類之間存在多態性。
接口能夠繼承另外一個接口。
十5、內部類
在類的內部定義的一個類。至關於一個類的內部成員。
在類的外部能夠訪問該類的內部類。
靜態內部類中的方法不能訪問外部類的非靜態對象。
十6、異常
java 中,將程序執行中發生的不正常狀況稱爲「異常」。
java 中的異經常使用於處理非預期的狀況,如文件沒找到,網絡錯誤,非法參數等。
java 程序運行過程當中所發生的異常事件可分爲兩類:
Error : JVM 系統內部錯誤、資源耗盡等嚴重狀況。
Exception : 其餘因編程錯誤或偶然的外在因素致使的通常問題。如空指針訪問,試圖讀取不存在的文件,網絡鏈接中斷。
自定義異常:
public class JavaTest extends RuntimeException {
public JavaTest() {
}
public JavaTest(String msg) {
super(msg);
}
}
十7、集合
java 集合能夠分爲Set 、List 、Map 三種體系。
-- Set : 無序,不可重複的集合。
-- List : 有序,可重複的集合。
-- Map : 具備映射關係的集合。
Collection 接口是 List ,Set 和 Queue 接口的父接口。該接口裏定義的方法便可用於操做Set 集合,也可用於操做List和Queue 集合。
Collection 中沒法獲取指定元素,但能夠遍歷全部元素。
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 (){ });
List 表明一個元素有序,且重複的集合,集合中的每一個元素都有其對應的順序索引。
List 容許使用重複的元素,能夠經過索引來訪問指定位置的集合元素。
List 默認按元素的添加順序設置元素的索引。
List 集合裏添加了一些根據索引來操做幾個元素的方法。
List 額外提供了一個 listlterator() 方法,該方法返回一個Listlterator 對象,ListIterator 接口繼承了Iterator 接口,提供了專門操做List 的方法:
Ⅰ. ArrayList 和 Vector
ArrayList 和 Vector 是List 接口的兩個典型實現。
區別:
Arrays.asList(...) 方法返回的List 集合既不是ArrayList 實例,也不是Vector 實例。Arrays.asList(...) 返回值是一個固定長度的List 集合。
Map 用於保存具備映射關係的數據,所以Map 集合裏保存着兩組值,一組用於保存Map 裏的Key ,另一組用於保存Map 裏的Value。
Map 中的key 和 value 均可以是任何引用類型的數據。
Map 中的Key 不容許重複,即同一個Map 對象的任何兩個Key 經過equals 方法比較都返回false 。
key 和 Value 之間存在單向一對一關係,即經過指定的Key 總能找到惟一的,肯定的Value 。
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 。
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 接口。
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");
Collections 是一個操做Set 、List 和 Map 等集合的工具類。
Collections 中提供了大量方法對集合元素進行排序、查詢和修改等操做,還提供了對集合對象設置不可變燉對集合對象實現同步控制等方法。
排序操做:
Enumeration 接口是Iterator 迭代器的「古老版本