国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java8官方文檔學習筆記

2019-11-06 06:30:27
字體:
來源:轉載
供稿:網友

文檔地址:

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概念圖

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:

Target Typing inLambda Expressions

Type Inference

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.


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 丽水市| 安溪县| 咸阳市| 易门县| 蕉岭县| 淮安市| 岐山县| 蒙山县| 朝阳县| 连山| 云浮市| 河津市| 温州市| 绿春县| 石台县| 绍兴市| 五大连池市| 井研县| 东海县| 邯郸市| 泸西县| 云霄县| 宝清县| 镇江市| 富顺县| 遂川县| 沐川县| 泗水县| 佛坪县| 苍南县| 驻马店市| 江城| 承德县| 肇东市| 淮安市| 米脂县| 股票| 来宾市| 根河市| 陆河县| 驻马店市|