日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

java 8代码 改 java7_Java 8 到 Java 14,改变了哪些你写代码的方式?

發(fā)布時間:2023/12/15 java 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 8代码 改 java7_Java 8 到 Java 14,改变了哪些你写代码的方式? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前幾天,JDK 14 正式發(fā)布了,這次發(fā)布的新版本一共包含了16個新的特性。

其實,從Java8 到 Java14 ,真正的改變了程序員寫代碼的方式的特性并不多,我們這篇文章就來看一下都有哪些。

Lambda表達(dá)式

Lambda 表達(dá)式是 Java 8 中最重要的一個新特性,Lambda 允許把函數(shù)作為一個方法的參數(shù)。

lambda 表達(dá)式的語法格式如下:

(parameters) -> expression

(parameters) ->{ statements; }

如以下例子:

// 1. 不需要參數(shù),返回值為 5

() -> 5

// 2. 接收一個參數(shù)(數(shù)字類型),返回其2倍的值

x -> 2 * x

// 3. 接受2個參數(shù)(數(shù)字),并返回他們的差值

(x, y) -> x – y

// 4. 接收2個int型整數(shù),返回他們的和

(int x, int y) -> x + y

// 5. 接受一個 string 對象,并在控制臺打印,不返回任何值(看起來像是返回void)

(String s) -> System.out.print(s)

Lambda表達(dá)式具有簡潔、容易進(jìn)行并行計算、是未來的編程趨勢等優(yōu)點,但同時也會帶來調(diào)試?yán)щy,新人理解成本高等缺點。

Streams API

除了Lambda 表達(dá)式外,Java 8中還引入了Stream API,這使得Java終于進(jìn)入到函數(shù)式編程的行列中來了。

Stream 使用一種類似用 SQL 語句從數(shù)據(jù)庫查詢數(shù)據(jù)的直觀方式來提供一種對 Java 集合運算和表達(dá)的高階抽象。

Stream API可以極大提高Java程序員的生產(chǎn)力,讓程序員寫出高效率、干凈、簡潔的代碼。

如下圖,就是通過Stream API對集合進(jìn)行了一系列的操作:

List strings = Arrays.asList("Hollis", "HollisChuang", "hollis", "Hello", "HelloWorld", "Hollis");

Stream s = strings.stream().filter(string -> string.length()<= 6).map(String::length).sorted().limit(3)

.distinct();

而且,Stream還支持并行流,在性能上比傳統(tǒng)的for循環(huán)要好很多。(詳細(xì)用法:《Java 8中處理集合的優(yōu)雅姿勢——Stream》)

從Lambda表達(dá)式和Stream API問世至今,已經(jīng)有6年的時間了,相信很多人已經(jīng)在工作中使用過這些特性了。

雖然對于這兩種語法的使用,很多人持有不同的看法,但是作者還是認(rèn)為這個功能是十分好用的,只是在日常寫代碼的時候不要過分"炫技"使用超長的流式操作,代碼可讀性不要太低就可以了。

新的日期和時間 API

在Java 8之前,日期時間 API 存在諸多問題,如:Date非線程安全、java.util和java.sql的包中都有日期類、日期類并不提供國際化,沒有時區(qū)支持。

所以,Java 8通過發(fā)布新的Date-Time API (JSR 310)來進(jìn)一步加強(qiáng)對日期與時間的處理。

新的java.time包涵蓋了所有處理日期,時間,日期/時間,時區(qū),時刻(instants),過程(during)與時鐘(clock)的操作。

常見操作如下:

// 獲取當(dāng)前的日期時間

LocalDateTime currentTime = LocalDateTime.now();

System.out.println("當(dāng)前時間: " + currentTime);

// 時間比較

LocalDate today = LocalDate.now();

LocalDate date1 = LocalDate.of(2014, 01, 14);

if(date1.equals(today)){}

// 時間增加

LocalTime time = LocalTime.now();

LocalTime newTime = time.plusHours(2); // adding two hours

但是說實話,Java8中的時間API作者日常工作中用的比較少,主要是有很多歷史代碼,還是依賴Date等類型,使用新的API就要面臨互相轉(zhuǎn)換問題。

本地變量類型推斷

在Java 10之前版本中,我們想定義定義局部變量時。我們需要在賦值的左側(cè)提供顯式類型,并在賦值的右邊提供實現(xiàn)類型:

MyObject value = new MyObject();

在Java 10中,提供了本地變量類型推斷的功能,可以通過var聲明變量:

var value = new MyObject();

本地變量類型推斷將引入“var”關(guān)鍵字,而不需要顯式的規(guī)范變量的類型。

其實,所謂的本地變量類型推斷,也是Java 10提供給開發(fā)者的語法糖。雖然我們在代碼中使用var進(jìn)行了定義,但是對于虛擬機(jī)來說他是不認(rèn)識這個var的,在java文件編譯成class文件的過程中,會進(jìn)行解糖,使用變量真正的類型來替代var(我反編譯了Java 10的本地變量類型推斷)

Switch 表達(dá)式

在JDK 12中引入了Switch表達(dá)式作為預(yù)覽特性。并在Java 13中修改了這個特性,引入了yield語句,用于返回值。

而在之后的Java 14中,這一功能正式作為標(biāo)準(zhǔn)功能提供出來。

在以前,我們想要在switch中返回內(nèi)容,還是比較麻煩的,一般語法如下:

int i;

switch (x) {

case "1":

i=1;

break;

case "2":

i=2;

break;

default:

i = x.length();

break;

}

在JDK13中使用以下語法:

int i = switch (x) {

case "1" -> 1;

case "2" -> 2;

default -> {

int len = args[1].length();

yield len;

}

};

或者

int i = switch (x) {

case "1": yield 1;

case "2": yield 2;

default: {

int len = args[1].length();

yield len;

}

};

在這之后,switch中就多了一個關(guān)鍵字用于跳出switch塊了,那就是yield,他用于返回一個值。和return的區(qū)別在于:return會直接跳出當(dāng)前循環(huán)或者方法,而yield只會跳出當(dāng)前switch塊。

Text Blocks

Java 13中提供了一個Text Blocks的預(yù)覽特性,并且在Java 14中提供了第二個版本的預(yù)覽。

text block,文本塊,是一個多行字符串文字,它避免了對大多數(shù)轉(zhuǎn)義序列的需要,以可預(yù)測的方式自動格式化字符串,并在需要時讓開發(fā)人員控制格式。

我們以前從外部copy一段文本串到Java中,會被自動轉(zhuǎn)義,如有一段以下字符串:

Hello, world

將其復(fù)制到Java的字符串中,會展示成以下內(nèi)容:

"

" +

"

" +

"

Hello, world

" +

"

" +

"

";

即被自動進(jìn)行了轉(zhuǎn)義,這樣的字符串看起來不是很直觀,在JDK 13中,就可以使用以下語法了:

"""

Hello, world

""";

使用"""作為文本塊的開始符合結(jié)束符,在其中就可以放置多行的字符串,不需要進(jìn)行任何轉(zhuǎn)義。看起來就十分清爽了。

如常見的SQL語句:

String query = """

SELECT `EMP_ID`, `LAST_NAME` FROM `EMPLOYEE_TB`

WHERE `CITY` = "INDIANAPOLIS"

ORDER BY `EMP_ID`, `LAST_NAME`;

""";

看起來就比較直觀,清爽了。

Records

Java 14 中便包含了一個新特性:EP 359: Records,

Records的目標(biāo)是擴(kuò)展Java語言語法,Records為聲明類提供了一種緊湊的語法,用于創(chuàng)建一種類中是“字段,只是字段,除了字段什么都沒有”的類。通過對類做這樣的聲明,編譯器可以通過自動創(chuàng)建所有方法并讓所有字段參與hashCode()等方法。這是JDK 14中的一個預(yù)覽特性。

使用record關(guān)鍵字可以定義一個記錄:

record Person (String firstName, String lastName) {}

record 解決了使用類作為數(shù)據(jù)包裝器的一個常見問題。純數(shù)據(jù)類從幾行代碼顯著地簡化為一行代碼。(詳見:Java 14 發(fā)布了,不使用”class”也能定義類了?還順手要干掉Lombok!)

總結(jié)

以上,就是從Java 8 到 Java 14中,新推出的可能會影響開發(fā)人員寫代碼的方式的一些主要特性。

不知道大家有沒有發(fā)現(xiàn),最近幾個版本中推出的一些功能,使得Java和Kotlin等語言越來越像了...

新的這些功能,確實在一定程度上可以簡化一些代碼,使得開發(fā)過程中更加高效,但是說實話,還沒有好到足夠吸引廣大開發(fā)者拋棄Java 8進(jìn)行大規(guī)模遷移!

還是那句話:版本任你發(fā),我用Java 8;但是新特性我們還是要去了解下的。

本文由博客一文多發(fā)平臺 OpenWrite 發(fā)布!

總結(jié)

以上是生活随笔為你收集整理的java 8代码 改 java7_Java 8 到 Java 14,改变了哪些你写代码的方式?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。