Java7 的新特性就是在switch 程式碼區塊中加入對String 的支持,雖然還只是加入String,但已經相對之前的版本僅支持Integer 好很多,這個功能在C# 1.0中就被支持,而且不光是String,所有的物件都可用在switch 區塊中(修正:C# 2.0 switch 只可以使用bool,char,integer,enum,string和對應的可空值類型中,A switch expression or case label must be a bool, char, string, integral, enum, or corresponding nullable type)。
;The try-with-resource Statement
;Java7 的這一新特性對C# 2.0 程式設計師來說再熟悉不過了,在編碼一些需要及時釋放的資源時,通常的做法是在finally 區塊中呼叫close() 一類的方法去釋放,而C# 提供了一個簡單的方法實現同樣的功能,程式碼如下:
;以下是程式碼片段:
;using(SqlConnection conn = new SqlConnection(“ ConnectionStringHere)){
;// Do something
;}
;上面的程式碼等效於:
;以下是程式碼片段:
;SqlConnection conn = new SqlConnection(「ConnectionStringHere) ;
;try{
;conn.open();
;// Do somethind
;} finally{
;conn.close();
;}
;而Java7 實作了類似的功能,只不過不是用using,而是使用try,程式碼如下:
;以下是程式碼片段:
;try (BufferedReader br = new BufferedReader(new FileReader(path)) ) {
;return br.readLine();
;}
對於C#,使用using 須滿足一個條件,即using 內聲明的物件實現了介面System.IDisposable,這樣一來,finally 區塊中的程式碼就可自動呼叫該介面下的Dispose()
方法,進而達到釋放資源的目的。對於 Java7 也有同樣的要求,就是物件必須實作介面 java.lang.AutoCloseable 或 java.io.Closeable。
;The For-Each Loop
Java7 終於實現 for-each 循環功能了,雖然是在 Java5 中的一個語法增強,但由於 Java6 沒有語法更新,故我將這個增強列為 Java7 的新特性。不過不理解為什麼還是要用 for 作為關鍵字,而不是直接像 C# 那樣引入 foreach 這個關鍵字,這樣是不是比較容易理解呢。以下是Java 版本的for-each 程式碼:
;以下是程式碼片段:
;void cancelAll(Collection c) {
;for (TimerTask t : c)
;t.cancel() ;
;}
;對於C# 版本,程式碼如下:
;以下是程式碼片段:
;void CancelAll(Collection c) {
;foreach (TimerTask t in c)
;t.Cancel();
;}
可以看出,兩者的實現並無太大區別,同樣簡潔明了,但適用範圍卻不一而足,Java7 貌似只能實現在集合中(包括傳統數組和泛型集合),而C# 可用在任何實作了System.IEnumerable 或其泛型版本System.IEnumerable 的物件中。
以上是Java7的新功能實例分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!