1. 程式人生 > >jdk1.8學習、jdk1.9學習、jdk10.0學習和總結

jdk1.8學習、jdk1.9學習、jdk10.0學習和總結

font .... date des 什麽 普通 例子 span 由於

由於中文參考資料很少,參考鏈接:

https://www.oschina.net/translate/109-new-features-in-jdk-10

http://chuansong.me/n/2365239553812

1、jdk10.0特性,局部變量類型推斷,var保留字,只要編譯器可以推斷此種類型,你不再需要專門聲明一個局部變量的類型。對於JDK10

來講最為顯著的就是引入了局部類型變量推斷這個特性

 1 package com.bie.lesson1;
 2 
 3 public class Student {
 4     
 5     //此處報錯,因為var必須作為局部變量使用
6 //var a = 10; 7 8 public static void show() { 9 //只要編譯器可以推斷此種類型,你不再需要專門聲明一個局部變量的類型。 10 var a = 10; 11 System.out.println(a + "局部變量可以使用var"); 12 } 13 14 public static void main(String[] args) { 15 Student.show(); 16 } 17 18
}

更多使用案例如下所示:

 1 package com.bie.lesson1;
 2 
 3 import java.util.ArrayList;
 4 
 5 public class Student {
 6 
 7     // 1、此處報錯,因為var必須作為局部變量使用
 8     // var a = 10;
 9 
10     public static void show() {
11         // 1、只要編譯器可以推斷此種類型,你不再需要專門聲明一個局部變量的類型。
12         var a = 10;
13         System.out
.println(a + "局部變量可以使用var"); 14 } 15 16 /** 17 * 1、增量for循環的使用局部變量類型的定義 18 */ 19 public static void showList() { 20 var list = new ArrayList<Integer>(); 21 list.add(1); 22 list.add(11); 23 list.add(111); 24 list.add(1111); 25 list.add(11111); 26 for (var a : list) { 27 System.out.println(a); 28 } 29 } 30 31 /** 32 * 1、普通for循環的使用局部變量類型的定義 33 */ 34 public static void showArray() { 35 int[] a = { 1, 2, 3, 4, 5 }; 36 for(var i=0;i<a.length;i++) { 37 System.out.println(a[i]); 38 } 39 } 40 41 public static void main(String[] args) { 42 // 1、局部變量類型推斷 43 var student = new Student(); 44 // 2、局部變量類型定義 45 Student.show(); 46 // 3、局部變量類型增量for循環的使用 47 showList(); 48 // 4、局部變量類型的普通for循環的使用 49 showArray(); 50 // 5、Lanbda表達式,函數式編程,局部變量的定義 51 var read = new Thread(() -> System.out.println("Lanbda表達式的推斷,局部變量定義")); 52 System.out.println(read.getName()); 53 } 54 55 }

2、Java1.8特性,Java 8的一個大亮點是引入函數式編程即Lambda表達式,使用它設計的代碼會更加簡潔。當開發者在編寫Lambda表達式時,也會隨之被編譯成一個函數式接口。下面這個例子就是使用Lambda語法來代替匿名的內部類,代碼不僅簡潔,而且還可讀。(如果學習了Scala語言,會發現Scala語言很簡潔,Spark就是用Scala開發的。)。

 1 package com.bie.lesson1;
 2 
 3 /**
 4  * 
 5  * @author biehl
 6  *
 7  */
 8 public interface Calculator {
 9 
10     /**
11      * result the a add b
12      * @param a
13      * @param b
14      * @return
15      */
16     int add(int a,int b);
17 }

下面使用Lanbda是學習的重點:

 1 package com.bie.lesson1;
 2 
 3 /**
 4  * 
 5  * @author biehl
 6  * @date: 2018年8月12日 下午4:15:39
 7  * @Description Java函數式編程之Lambda使用
 8  * 
 9  */
10 public class LanbdaLearn {
11 
12     /**
13      * use the Lanbda,a add b
14      * 
15      * @param a
16      * @param b
17      * @param calculator
18      */
19     public static void sum(int a, int b, Calculator calculator) {
20         int result = calculator.add(a, b);
21         System.out.println("result : " + result);
22     }
23 
24     public static void main(String[] args) {
25         // 局部變量類型推斷
26         var sum1 = 100;
27         var sum2 = 200;
28         // 備註:小括號代表Caluator接口add抽象方法的參數,大括號代表 add 的方法體,註意方法體最後的;
29         sum(sum1, sum2, (int a, int b) -> {
30             return a + b;
31         });
32 
33         // Lanbda省略格式
34         // 可推導即可省略
35         // Lambda強調的是“做什麽”而不是“怎麽做”,所以凡是可以根據上下文推導得知的信息,都可以省略。
36         // 例如上例還可 以使用Lambda的省略寫法:
37         sum(sum1, sum2, (a, b) -> a + b);
38 
39         // 省略規則
40         // 在Lambda標準格式的基礎上,使用省略寫法的規則為:
41         // 1.小括號內參數的類型可以省略;
42         // 2.如果小括號內有且僅有一個參,則小括號可以省略;
43         // 3.如果大括號內有且僅有一個語句,則無論是否有返回值,都可以省略大括號、return關鍵字及語句分號。
44 
45     }
46 
47 }

待續......

jdk1.8學習、jdk1.9學習、jdk10.0學習和總結