Java8官方文檔學習筆記

文檔地址:

http://docs.oracle.com/javase/8/docs/


Oracle有兩個實現了Java平臺標準版本(Java SE)8,即Java標準開發工具(JDK)8和Java標準運行時環境(JRE)8.

JDK8是JRE8的超集,包含了JRE8的所有內容,還包括諸如編譯器和調試器等在開發applet和application時必要的開發環境。JRE8提供函數庫,java虛擬機(JVM)以及其他用於運行用Java編程語言編寫的applets和applications。注意,JRE包含了在Java SE規範中並不作要求的組件,包括標準和非標準Java組件。


圖1. Java概念圖



Descriptionof Java Conceptual Diagram

JDK   JavaLanguage
JavaLanguage
   
Tools &
Tool APIs
java javac javadoc jar javap jdeps Scripting
Security Monitoring JConsole VisualVM JMC JFR
JPDA JVM TI IDL RMI JavaDB Deployment
Internationalization WebServices Troubleshooting
JRE Deployment
Java WebStart Applet / Java Plug-in
User Interface
Toolkits
JavaFX
Swing Java 2D AWT Accessibility
Drag andDrop Input Methods ImageI/O PrintService Sound
Java SE
API
Integration
Libraries
IDL JDBC JNDI RMI RMI-IIOP Scripting
Compact
Profiles
OtherBase
Libraries
Beans Security Serialization ExtensionMechanism
JMX XML JAXP Networking OverrideMechanism
JNI Date andTime Input/Output Internationalization
lang and util
Base Libraries
lang andutil
Math Collections RefObjects RegularExpressions
Logging Management Instrumentation ConcurrencyUtilities
Reflection Versioning Preferences API JAR Zip
Java VirtualMachine
Java HotSpot Clientand Server VM
   


Java8中的增強功能

http://docs.oracle.com/javase/8/docs/technotes/guides/language/enhancements.html#javase8

1. lambda表達式(Lambda Expressions):讓你能夠將一個動作單元進行壓縮,並將其傳遞給其他代碼。如果你希望當某個過程結束後,或當某個過程發生異常後,在collection內的每個元素上執行一個特定動作,你可以用lambda表達式來達到目的。lambda表達式由以下特點所支持:

(1)方法引用(Method References):對於已命名的方法,方法引用是緊湊且易讀的lambda表達式;

(2)默認方法(Default Methods):讓你能夠將新功能添加到函數庫的接口,並且確保於舊版本接口的二進制兼容性(binary compatibility)。他們是被實現了的接口方法,並且是方法簽名起始處的默認關鍵詞。此外,你可以在接口中定義靜態方法。

(3)基於Java8中lambda表達式和Streams的新的增強版API(New and Enhanced APIs That Take Advantage of Lambda Expressions and Streams in Java SE 8);

2. 類型推斷個改進:Java編譯器利用目標類型來判斷通用方法調用(generic method invocation)中的參數類型。一個表達式的目標類型,是java編譯器依據該表達式出現位置所期望的數據類型。例如,你可以在Java SE7中將賦值語句的目標類型用於類型推斷。然而,在Java SE 8彙總,你可以在更多場景中將目標類型用於類型推斷。最突出的例子是使用方法調用的目標類型來判斷其參數的數據類型。

考慮如下例子:

List<String> stringList = new ArrayList<>();
stringList.add("A");
stringList.addAll(Arrays.asList());

先暫且忽略泛型(generics),addAll方法期望一個Collection實例作爲參數,並且Arrays.asList方法返回了List實例。該代碼是可行的,因爲List是Collection的子類。

現在考慮泛型,addAll的目標類型是Collection<? exends String>,而Arrays.asList返回了一個List<T>實例。在這個例子中,Java SE8編譯器能夠將類型變量T的值推斷爲String。編譯器是由目標類型Collection<? extends String>推斷出這個結果的。

Java SE8或更早版本的編譯器則不能接受這樣的代碼,因爲他們不能利用目標類型來判斷方法調用參數的類型。例如,Java SE7編譯器會生成類似如下的錯誤信息:

error: no suitable method found for addAll(List<Object>) ...
method List.addAll(Collection<? extends String>) is not applicable (actual argument List<Object> cannot be converted to Collection<? extends String> by method invocation conversion)

因此,在類似這樣的場景中,當Java編譯器不能判斷類型時,你必須用type witnesses顯式指定類型變量的值。

例如,如下代碼在Java SE7中是允許的:

List<String> stringList = new ArrayList<>();
stringList.add("A");
stringList.addAll(Arrays.<String>asList());

See the following sections in the Java Tutorials for more information:



3. java類型註釋:可以將註釋用於任何用到類型的地方。這一特性與可插拔類型系統聯合使用,允許對代碼進行更強的類型檢查。For more information, seeType Annotations and Pluggable Type Systems in the new Annotations lesson in the Java Tutorial.


4. 重複註釋:可以將同一個註釋類型在同一個聲明或類型使用中應用多次。For more information, see Repeating Annotations in the new Annotations lesson in the Java Tutorial.


5. 方法參數反射:利用java.lang.reflect.Executable.getParameters, 可以獲得任何方法或構造器的形式參數名。(類Method和Constructor繼承自類Executable,因此繼承了方法Executable.getParameters)。然而,.class文件默認情況下並不存儲形式參數名。爲了在一個特殊的.class文件中存儲形式參數名,並因此啓用Reflection API來檢索形式參數名,要用javac編譯器的-parameters選項編譯源文件。SeeObtaining Names of Method Parameters in the Java Tutorials.










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