[阅读笔记] Java 7 新特性
Time: 1.5 hours
原文:A look at Java 7's new features, by Madhusudhan Konda
http://radar.oreilly.com/2011/09/java7-features.html
?
1. 引入了"Diamond Operator"(寫法:<>)
一句話描述:簡化創建參數化類的對象的語法。
示例:
(before 7) Map<String, List<Trade>> trades = new TreeMap<String, List<Trade>> ();
(since 7) Map<String, List<Trade>> trades = new TreeMap <> ();
注意點:
trades = new TreeMap () 也是合法的,但是編譯器會提示"type-safety warnings"
Comment:
Java 7以前要避免這種繁瑣的語法,要借用static factory method來實現;《Effective Java 2nd》 Item 1中對此進行過說明, Joshua在書中提到"Someday the language may perform this sort of type inference on constructor invocations as well as method invocations.",果不其然,現在這個版本里就支持了這個特性。
2. Switch支持String類型
一句話描述:無。
示例:無:
注意點:判斷case是否相等時調用String.equals()方法進行比較。
Comment:
1. 這樣switch支持的類型有:primitive types, enum, string
2. 使用string比enum更容易出錯,降低出錯風險的手段:(1) 將string定義為常量,在case里僅用常量來引用字符串 (2) 如果業務邏輯允許,default語句要毫不猶豫地拋出異常。
3. Automatic resource management
一句話描述:try-finally的替代品,用于確保資源被釋放。示例:
(before 7)
try {
fos = new FileOutputStream("movies.txt"); dos = new DataOutputStream(fos); dos.writeUTF("Java 7 Block Buster"); } catch (IOException e) { e.printStackTrace(); } finally { try { fos.close(); dos.close(); } catch (IOException e) { // log the exception } } (since 7)try (FileOutputStream fos = new FileOutputStream("movies.txt");
DataOutputStream dos = new DataOutputStream(fos)) { dos.writeUTF("Java 7 Block Buster");
} catch (IOException e) { // log the exception
????????????? }
注意點:
1. 放在這個結構里的資源必須要實現java.lang.AutoCloseable接口(這個接口僅有一個close方法)
2. 印象中C#里早就有類似的特性
3. 觀察示例中的代碼,(before 7)的版本里有兩個IOException 的catch 語句,對應兩個不同場景,因此在catch語句塊里有不同的處理邏輯;
但(since 7)僅有一個catch,如何區分不同的情形?需要檢查一下編譯后的字節碼確認一下。
4.帶下劃線的數字
一句話描述:看很長的數字更方便。
示例:int million = 1_000_000
Comment: 對這個特性是否會被開發人員廣泛接受表示懷疑。
5. 對異常處理機制的改進
一句話描述:可以合并多個catch塊。
示例:
??????? try {
????????????????? methodThatThrowsThreeExceptions();
??????????? } catch (ExceptionOne | ExceptionTwo | ExceptionThree e) {
??????????????? ? // log and deal with all Exceptions
??????????? }
Comment:
可以將處理邏輯一樣的Exception寫到一起,減少代碼冗余
6. New file system API (NIO 2.0)
一句話描述:使開發支持多文件系統的代碼更加輕松。
新的內容包括:1. java.nio.file,新的類包括Path, Paths, FileSystem, FileSystems等;2. File Change notifacation
7. Fork and Join
一句話描述:將任務分給多個core執行,然后匯總
說明:簡單認識相關的幾個類
ForkJoinPool:??? 用以執行ForkJoinTask,實現了Executor, ExecutorService。
ForkJoinTask:??? 待求解的問題/任務。
RecursiveAction:??? ForkJoinTask的子類,不返回值。
RecursiveTask:??? ForkJoinTask的子類,返回值。
Executor:??????? 被ForkJoinPool所實現。
8. Supporting dynamism (invokedynamic)
一句話描述:提供對動態語言的支持。
說明:根據類型檢查是在編譯還是運行時進行,可分為"static typed language"(如Java)和"dynamically typed language"(如Ruby, Python, Clojure)。Java 7中有一個新的包java.lang.invoke用來對動態語言進行支持。要了解這個特性需要找專門的資料。
轉載于:https://www.cnblogs.com/yuquanlaobo/archive/2011/11/14/2248477.html
總結
以上是生活随笔為你收集整理的[阅读笔记] Java 7 新特性的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 炒虾怎么做 简单易学的炒虾技巧?
- 下一篇: 2022美术生最吃香的专业有哪些(5大美