原创 【java基礎(五十)】爲什麼要使用泛型程序設計

從Java程序設計語言1.0版發佈以來,變化最大的部分就是泛型。致使Java SE 5.0中增加泛型機制的主要原因是爲了滿足1999年制定的最早的Java規範需求之一(JSR 14)。專家組花費了5年左右的時間用來定義規範和測試實

原创 【java基礎(四十七)】異常(三)捕獲異常、異常鏈

拋出異常的過程十分容易,只要將其拋出就不用理睬了。當然,有些代碼必須捕獲異常,且捕獲異常需要進行周密的計劃。 捕獲異常 如果某個異常發生的時候沒有在任何地方進行捕獲,那程序就會終止執行,並在控制檯上打印出異常信息,其中包括異常的類

原创 【java基礎(四十三)】內部類(二)

內部類的特殊語法規則 之前,我們說了在內部類有一個外圍類的引用outer。事實上,使用外圍類引用的正規語法還要複雜一些: OuterClass.this 表示外圍類引用。如:可以想下面這樣編寫TimePrinter內部類的act

原创 【java基礎(四十一)】lambda表達式(三)

構造器引用 構造器引用與方法引用很類似,只不過方法名爲new。例如,Person:new是Person構造器的一個引用。哪一個構造器呢?這取決於上下文。假設你有一個字符串列表。可以把它轉換爲一個Person對象數組,爲此要在各個字

原创 【java基礎(四十二)】內部類(一)

內部類(inner class)是定義在另一個類中的類。 爲什麼要使用內部類 內部類方法可以訪問該類定義所在的作用域中的數據,包括私有的數據。 內部類可以對同一個包中的其他類隱藏起來。 當想要定義一個回調函數且不想編寫大量代碼時

原创 【java基礎(四十四)】內部類(三)

匿名內部類 將局部內部類的使用再深入一步。假設只創建這個類的一個對象,就不必命名了。這種類成爲匿名內部列(anonymous inner class)。 public void start(int interval, boolea

原创 【java基礎(三十三)】反射(三)

在運行時使用反射分析對象 前面,我們已經知道如何查看任意對象數據域名稱和類型: 獲得對應的Class對象。 獲得Class對象調用getDeclaredFields。 現在我們可以進一步查看數據域的實際內容。當然,在編寫程序時

原创 【java基礎(三十五)】繼承的設計技巧

將公共操作和域放在超類 這就是爲什麼將姓名域放在Person類中,而沒有將它放在Employee和Student類中的原因。 不要使用受保護的域 有些程序員認爲,將大多數的實例域定義爲protected是一個不錯的主意,只有這樣,

原创 【java基礎(三十六)】接口(一)

接口概念 在Java程序設計語言中,接口不是類,而是對類的一組需求描述,這些類要遵從接口描述的統一格式進行定義。 我們經常聽到服務提供商這樣說:“如果類遵從某個特定接口,那麼就履行這項服務”。如,Arrays類中的sort方法承諾

原创 【java基礎(三十四)】反射(四)

調用任意方法 在C和C++中,可以從函數指針執行任意函數。從表面看,Java沒有提供方法指針,即將一個方法的存儲地址傳給另一個方法,以便第二個方法能夠隨後調用它。事實上,Java的設計者曾說過:方法指針是很危險的,並且常常帶來隱患

原创 【java基礎(三十八)】接口示例

接口與回調 回調(callback)是一種常見的程序設計模式。在這種模式中,可以指出某個特定事件發生時應該採取的動作。如,可以指出在按下鼠標或選擇某個菜單項時應該採取什麼行動。 在java.swing包中有一個Timer類,可以使

原创 【java基礎(四十)】lambda表達式(二)

函數式接口 Java中已經有很多封裝代碼塊的接口,如ActionListener或Comparator。lambda表達式與這些接口是兼容的。 對於只有一個抽象方法的接口,需要這種接口對象時,就可以提供一個lambda表達式。這種

原创 【java基礎(三十九)】lambda表達式(一)

lambda表達式,這是這些年來Java語言最讓人激動的一個變化。 爲什麼引入lambda表達式 lambda表達式是一個可傳遞的代碼塊,可以在以後執行一次或多次。具體介紹語法之前,我們先退一步,觀察一下我們在Java中的哪些地方

原创 【java基礎(三十七)】接口(二)

接口的特性 接口不是類,尤其不能使用new運算符實例化一個接口: x = new Comparable(...); // 這樣是不可以的 然而,儘管不能構造接口的對象,卻能聲明接口的變量: Comparable x; // 這樣

原创 【java基礎(三十一)】反射(一)

反射類(reflection library)提供了一個非常豐富且精心設計的工具類,以便編寫能夠動態操作Java代碼的程序。特別是在設計或運行中添加新類時,能夠快速地應用開發工具動態地查詢添加類的能力。 能夠分析類能力的程序稱爲反