黑馬程序員---java基礎加強---高新技術JDK1.5新特性

----------- android培訓java培訓、java學習型技術博客、期待與您交流! -----------

一 Eclipse的的配置

workerspace與project,必須要求會切換空間與導入項目

perspective與view

設置整個workspace的javac與java,高版本的java能運行低版本的javac編譯的程序

快捷鍵的綁定與代碼模板,利用快捷鍵提高效率。

二 靜態導入

import語句可以導入一個類或者某個包中所有的類

import static 語句導入一個類中的某個靜態方法或者所有的靜態方法

三 可變參數

問題:一個方法接受的參數個數不固定,例如:

System.out.println(add(2,3,4));

System.out.println.out.println(add(2,3,4,5,67));

可變參數的特點:只能出現在參數列表的最後;...位於變量類型和變量名之間,前後有空格都行;調用可變參數的方法時,編譯爲該可變參數隱含創建一個數組,在方法體中以數組的形式訪問可變參數。


四 overload(重載)與override(重寫)的區別

1、重載:

(1) 方法重載是讓類以統一的方式處理不同類型數據的一種手段。多個同名函數同時存在,具有不同的參數個數/類型。

重載Overloading是一個類中多態性的一種表現。

(2) Java的方法重載,就是在類中可以創建多個方法,它們具有相同的名字,但具有不同的參數和不同的定義。

用方法時通過傳遞給它們的不同參數個數和參數類型來決定具體使用哪個方法, 這就是多態性。

(3) 重載的時候,方法名要一樣,但是參數類型和個數不一樣,返回值類型可以相同也可以不相同。無法以返回型別作爲重載函數的區分標     準。

2、重寫:

(1) 父類與子類之間的多態性,對父類的函數進行重新定義。如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫(Overriding)。在Java中,子類可繼承父類中的方法,而不需要重新編寫相同的方法。

    但有時子類並不想原封不動地繼承父類的方法,而是想作一定的修改,這就需要採用方法的重寫。

    方法重寫又稱方法覆蓋。

(2)若子類中的方法與父類中的某一方法具有相同的方法名、返回類型和參數表,則新方法將覆蓋原有的方法。

   父類中原有的方法,可使用super關鍵字,該關鍵字引用了當前類的父類。

(3)子類函數的訪問修飾權限不能少於父類的;

學習總結

    多態性是面向對象編程的一種特性,和方法無關,
     簡單說,就是同樣的一個方法能夠根據輸入數據的不同,做出不同的處理,即方法的
   重載——有不同的參數列表(靜態多態性)

   而當子類繼承自父類的相同方法,輸入數據一樣,但要做出有別於父類的響應時,你就要覆蓋父類方法,

    即在子類中重寫該方法——相同參數,不同實現(動態多態性)

五 增強for循環

語法 for(type 變量名 :集合變量名){...}
注意事項:迭代量必須在()中定義,集合變量可以是數組或實現了iterable接口集合類

與傳統for循環的比較(重點):

高級for循環在使用時,必須要明確被遍歷的目標。這個目標,可以是Collection集合或者數組,如果遍歷Collection集合,在遍歷過程中還需要對元素進行操作,比如刪除,

需要使用迭代器。 

如果遍歷數組,還需要對數組元素進行操作,建議用傳統for循環因爲可以定義角標通過角標操作元素。如果只爲遍歷獲取,可以簡化成高級for循環,它的出現爲了簡化書寫。 

高級for循環可以遍歷map集合嗎?不可以。但是可以將map轉成set後再使用foreach語句。

1、作用:對存儲對象的容器進行迭代: 數組  collection   map 

2)、增強for循環迭代數組: 

String [] arr = {"a", "b", "c"};//數組的靜態定義方式,只試用於數組首次定義的時候 

for(String s : arr) { 

System.out.println(s); 

3)、單列集合 Collection 

List list = new ArrayList(); 

list.add("aaa"); 

// 增強for循環沒有使用泛型的集合能不能使用增強for循環迭代?能

for(Object obj : list) { 

String s = (String) obj; 

System.out.println(s); 

4)、雙列集合 Map 

Map map = new HashMap();

 map.put("a", "aaa"); 

// 傳統方式:必須掌握這種方式 

Set entrys = map.entrySet(); // 1.獲得所有的鍵值對Entry對象 

iter = entrys.iterator(); // 2.迭代出所有的

entry while(iter.hasNext()) { 

Map.Entry entry = (Entry) iter.next(); 

String key = (String) entry.getKey(); // 分別獲得keyvalue

 String value = (String) entry.getValue(); 

System.out.println(key + "=" + value); 

// 增強for循環迭代:原則上map集合是無法使用增強for循環來迭代的,因爲增強for循環只能針對實現了Iterable接口的集合進行迭代;Iterablejdk5中新定義的接口,就一個方法iterator方法,只有實現了Iterable接口的類,才能保證一定有iterator方法,java有這樣的限定是因爲增強for循環內部還是用迭代器實現的,而實際上,我們可以通過某種方式來使用增強for循環。

 for(Object obj : map.entrySet()) { 

Map.Entry entry = (Entry) obj;  // obj 依次表示Entry 

System.out.println(entry.getKey() + "=" + entry.getValue()); 


六枚舉enum

問題:對象的某個屬性的值不能是任意的,必須爲固定的一組取值其中的某一個;

 解決辦法: 

1.在setGrade方法中做判斷,不符合格式要求就拋出異常;

2. 直接限定用戶的選擇,通過自定義類模擬枚舉的方式來限定用戶的輸入,寫一個Grade類,私有構造函數,對外提供5個靜態的常量表示類的實例;

3,jdk5中新定義了枚舉類型,專門用於解決此類問題; 

4,枚舉就是一個特殊的java類,可以定義屬性、方法、構造函數、實現接口、繼承類;

枚舉元素必須位於枚舉體中的最開始部分,枚舉元素列表的後面有分號與其它成員分隔,把枚舉中的成員方法或變量等放在枚舉元素的前面,編譯器報告錯誤。

帶構造方法的枚舉:

1。構造方法必須定義爲私有

2、如果有多種構造方法,該如何選擇哪個構造方法?

3.枚舉元素mon和mon()的效果一樣,都是調用默認的構造方法


帶方法的枚舉:

1.定義枚舉

2.、實現普通的next方法

2、實現抽象的next方法,每個元素分別是由枚舉類的子類來生成的實例對象,這些子類採用類似內部類的方式進行定義

4、增加上表示時間的構造方法。

枚舉只有一個成員時,就可以作爲一種單例的實現方式。





----------- android培訓java培訓、java學習型技術博客、期待與您交流! -----------



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