日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

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

java

Java9发布回顾Java 8的十大新特性

發(fā)布時(shí)間:2024/9/30 java 60 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java9发布回顾Java 8的十大新特性 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

java9已經(jīng)在北京時(shí)間9月22日正式發(fā)布,開發(fā)者可以在oracle jdk官網(wǎng)上下載到最新的jdk9。

今天,我們先來(lái)一起復(fù)習(xí)一下2014年發(fā)布的Java 8的十大新特性。先來(lái)喝杯java~~~


按照java升級(jí)的傳統(tǒng),偶數(shù)版的(468)改動(dòng)較小,奇數(shù)版的(579)都是大改動(dòng)。但對(duì)于java8而言是一次變化巨大的更新,耗費(fèi)了工程師大量的時(shí)間,還借鑒了很多其它語(yǔ)言和類庫(kù)。這里為大家列舉十個(gè)新特性。


  • Lambda表達(dá)式

Lambda表達(dá)式(也稱為閉包)是整個(gè)Java 8發(fā)行版中最受期待的在Java語(yǔ)言層面上的改變,Lambda允許把函數(shù)作為一個(gè)方法的參數(shù)(函數(shù)作為參數(shù)傳遞進(jìn)方法中),或者把代碼看成數(shù)據(jù):函數(shù)式程序員對(duì)這一概念非常熟悉。在JVM平臺(tái)上的很多語(yǔ)言(Groovy,Scala,……)從一開始就有Lambda,但是Java程序員不得不使用毫無(wú)新意的匿名類來(lái)代替lambda。

關(guān)于Lambda設(shè)計(jì)的討論占用了大量的時(shí)間與社區(qū)的努力。可喜的是,最終找到了一個(gè)平衡點(diǎn),使得可以使用一種即簡(jiǎn)潔又緊湊的新方式來(lái)構(gòu)造Lambdas。在最簡(jiǎn)單的形式中,一個(gè)lambda可以由用逗號(hào)分隔的參數(shù)列表、–>符號(hào)與函數(shù)體三部分表示。例如:

Arrays.asList( "a", "b", "d" ).forEach( e -> System.out.println( e ) );

請(qǐng)注意參數(shù)e的類型是由編譯器推測(cè)出來(lái)的。同時(shí),你也可以通過(guò)把參數(shù)類型與參數(shù)包括在括號(hào)中的形式直接給出參數(shù)的類型:
Arrays.asList( "a", "b", "d" ).forEach( ( String e ) -> System.out.println( e ) );
在某些情況下lambda的函數(shù)體會(huì)更加復(fù)雜,這時(shí)可以把函數(shù)體放到在一對(duì)花括號(hào)中,就像在Java中定義普通函數(shù)一樣。例如:
Arrays.asList( "a", "b", "d" ).forEach( e -> {System.out.print( e );System.out.print( e ); } );
Lambda可以引用類的成員變量與局部變量(如果這些變量不是final的話,它們會(huì)被隱含的轉(zhuǎn)為final,這樣效率更高)。例如,下面兩個(gè)代碼片段是等價(jià)的:

String separator = ","; Arrays.asList( "a", "b", "d" ).forEach( ( String e ) -> System.out.print( e + separator ) ); final String separator = ","; Arrays.asList( "a", "b", "d" ).forEach( ( String e ) -> System.out.print( e + separator ) );
Lambda可能會(huì)返回一個(gè)值。返回值的類型也是由編譯器推測(cè)出來(lái)的。如果lambda的函數(shù)體只有一行的話,那么沒(méi)有必要顯式使用return語(yǔ)句。下面兩個(gè)代碼片段是等價(jià)的:
Arrays.asList( "a", "b", "d" ).sort( ( e1, e2 ) -> e1.compareTo( e2 ) ); Arrays.asList( "a", "b", "d" ).sort( ( e1, e2 ) -> {int result = e1.compareTo( e2 );return result; } );
語(yǔ)言設(shè)計(jì)者投入了大量精力來(lái)思考如何使現(xiàn)有的函數(shù)友好地支持lambda。最終采取的方法是:增加函數(shù)式接口的概念。函數(shù)式接口就是一個(gè)具有一個(gè)方法的普通接口。像這樣的接口,可以被隱式轉(zhuǎn)換為lambda表達(dá)式。java.lang.Runnable與java.util.concurrent.Callable是函數(shù)式接口最典型的兩個(gè)例子。在實(shí)際使用過(guò)程中,函數(shù)式接口是容易出錯(cuò)的:如有某個(gè)人在接口定義中增加了另一個(gè)方法,這時(shí),這個(gè)接口就不再是函數(shù)式的了,并且編譯過(guò)程也會(huì)失敗。為了克服函數(shù)式接口的這種脆弱性并且能夠明確聲明接口作為函數(shù)式接口的意圖,Java 8增加了一種特殊的注解@FunctionalInterface(Java 8中所有類庫(kù)的已有接口都添加了@FunctionalInterface注解)。讓我們看一下這種函數(shù)式接口的定義:
@FunctionalInterface public interface Functional {void method(); }
需要記住的一件事是: 默認(rèn)方法與靜態(tài)方法 并不影響函數(shù)式接口的契約,可以任意使用:
@FunctionalInterface public interface FunctionalDefaultMethods {void method();default void defaultMethod() { } }

Lambda是Java 8最大的賣點(diǎn)。它具有吸引越來(lái)越多程序員到Java平臺(tái)上的潛力,并且能夠在純Java語(yǔ)言環(huán)境中提供一種優(yōu)雅的方式來(lái)支持函數(shù)式編程。更多詳情可以參考官方文檔。



  • 接口的默認(rèn)方法與靜態(tài)方法

Java 8用默認(rèn)方法與靜態(tài)方法這兩個(gè)新概念來(lái)擴(kuò)展接口的聲明。默認(rèn)方法使接口有點(diǎn)像Traits(Scala中特征(trait)類似于Java中的Interface,但它可以包含實(shí)現(xiàn)代碼,也就是目前Java8新增的功能),但與傳統(tǒng)的接口又有些不一樣,它允許在已有的接口中添加新方法,而同時(shí)又保持了與舊版本代碼的兼容性。

默認(rèn)方法與抽象方法不同之處在于抽象方法必須要求實(shí)現(xiàn),但是默認(rèn)方法則沒(méi)有這個(gè)要求。相反,每個(gè)接口都必須提供一個(gè)所謂的默認(rèn)實(shí)現(xiàn),這樣所有的接口實(shí)現(xiàn)者將會(huì)默認(rèn)繼承它(如果有必要的話,可以覆蓋這個(gè)默認(rèn)實(shí)現(xiàn))。讓我們看看下面的例子:

private interface Defaulable {// Interfaces now allow default methods, the implementer may or // may not implement (override) them.default String notRequired() { return "Default implementation"; } }private static class DefaultableImpl implements Defaulable { }private static class OverridableImpl implements Defaulable {@Overridepublic String notRequired() {return "Overridden implementation";} }

Defaulable接口用關(guān)鍵字default聲明了一個(gè)默認(rèn)方法notRequired(),Defaulable接口的實(shí)現(xiàn)者之一DefaultableImpl實(shí)現(xiàn)了這個(gè)接口,并且讓默認(rèn)方法保持原樣。Defaulable接口的另一個(gè)實(shí)現(xiàn)者OverridableImpl用自己的方法覆蓋了默認(rèn)方法。

Java 8帶來(lái)的另一個(gè)有趣的特性是接口可以聲明(并且可以提供實(shí)現(xiàn))靜態(tài)方法。例如:

private interface DefaulableFactory {// Interfaces now allow static methodsstatic Defaulable create( Supplier< Defaulable > supplier ) {return supplier.get();} }
下面的一小段代碼片段把上面的默認(rèn)方法與靜態(tài)方法黏合到一起:
public static void main( String[] args ) {Defaulable defaulable = DefaulableFactory.create( DefaultableImpl::new );System.out.println( defaulable.notRequired() );defaulable = DefaulableFactory.create( OverridableImpl::new );System.out.println( defaulable.notRequired() ); } 這個(gè)程序的控制臺(tái)輸出如下:
Default implementation Overridden implementation
在JVM中,默認(rèn)方法的實(shí)現(xiàn)是非常高效的,并且通過(guò)字節(jié)碼指令為方法調(diào)用提供了支持。默認(rèn)方法允許繼續(xù)使用現(xiàn)有的Java接口,而同時(shí)能夠保障正常的編譯過(guò)程。這方面好的例子是大量的方法被添加到j(luò)ava.util.Collection接口中去:stream(),parallelStream(),forEach(),removeIf(),……

盡管默認(rèn)方法非常強(qiáng)大,但是在使用默認(rèn)方法時(shí)我們需要小心注意一個(gè)地方:在聲明一個(gè)默認(rèn)方法前,請(qǐng)仔細(xì)思考是不是真的有必要使用默認(rèn)方法,因?yàn)槟J(rèn)方法會(huì)帶給程序歧義,并且在復(fù)雜的繼承體系中容易產(chǎn)生編譯錯(cuò)誤。更多詳情請(qǐng)參考 官方文檔


  • Stream

最新添加的Stream API(java.util.stream) 把真正的函數(shù)式編程風(fēng)格引入到Java中。這是目前為止對(duì)Java類庫(kù)最好的補(bǔ)充,因?yàn)镾tream API可以極大提供Java程序員的生產(chǎn)力,讓程序員寫出高效率、干凈、簡(jiǎn)潔的代碼。

Stream API極大簡(jiǎn)化了集合框架的處理(但它的處理的范圍不僅僅限于集合框架的處理,這點(diǎn)后面我們會(huì)看到)。讓我們以一個(gè)簡(jiǎn)單的Task類為例進(jìn)行介紹:

public class Streams {private enum Status {OPEN, CLOSED};private static final class Task {private final Status status;private final Integer points;Task( final Status status, final Integer points ) {this.status = status;this.points = points;}public Integer getPoints() {return points;}public Status getStatus() {return status;}@Overridepublic String toString() {return String.format( "[%s, %d]", status, points );}} } Task類有一個(gè)分?jǐn)?shù)的概念(或者說(shuō)是偽復(fù)雜度),其次是還有一個(gè)值可以為OPEN或CLOSED的狀態(tài).讓我們引入一個(gè)Task的小集合作為演示例子:
final Collection< Task > tasks = Arrays.asList(new Task( Status.OPEN, 5 ),new Task( Status.OPEN, 13 ),new Task( Status.CLOSED, 8 ) ); 我們下面要討論的第一個(gè)問(wèn)題是所有狀態(tài)為OPEN的任務(wù)一共有多少分?jǐn)?shù)?在Java 8以前,一般的解決方式用foreach循環(huán),但是在Java 8里面我們可以使用stream:一串支持連續(xù)、并行聚集操作的元素。
// Calculate total points of all active tasks using sum() final long totalPointsOfOpenTasks = tasks.stream().filter( task -> task.getStatus() == Status.OPEN ).mapToInt( Task::getPoints ).sum();System.out.println( "Total points: " + totalPointsOfOpenTasks ); 程序在控制臺(tái)上的輸出如下:
Total points: 18

這里有幾個(gè)注意事項(xiàng)。第一,task集合被轉(zhuǎn)換化為其相應(yīng)的stream表示。然后,filter操作過(guò)濾掉狀態(tài)為CLOSED的task。下一步,mapToInt操作通過(guò)Task::getPoints這種方式調(diào)用每個(gè)task實(shí)例的getPoints方法把Task的stream轉(zhuǎn)化為Integer的stream。最后,用sum函數(shù)把所有的分?jǐn)?shù)加起來(lái),得到最終的結(jié)果。

在繼續(xù)講解下面的例子之前,關(guān)于stream有一些需要注意的地方(詳情在這里).stream操作被分成了中間操作與最終操作這兩種。

中間操作返回一個(gè)新的stream對(duì)象。中間操作總是采用惰性求值方式,運(yùn)行一個(gè)像filter這樣的中間操作實(shí)際上沒(méi)有進(jìn)行任何過(guò)濾,相反它在遍歷元素時(shí)會(huì)產(chǎn)生了一個(gè)新的stream對(duì)象,這個(gè)新的stream對(duì)象包含原始stream
中符合給定謂詞的所有元素。

像forEach、sum這樣的最終操作可能直接遍歷stream,產(chǎn)生一個(gè)結(jié)果或副作用。當(dāng)最終操作執(zhí)行結(jié)束之后,stream管道被認(rèn)為已經(jīng)被消耗了,沒(méi)有可能再被使用了。在大多數(shù)情況下,最終操作都是采用及早求值方式,及早完成底層數(shù)據(jù)源的遍歷。

stream另一個(gè)有價(jià)值的地方是能夠原生支持并行處理。讓我們來(lái)看看這個(gè)算task分?jǐn)?shù)和的例子。

// Calculate total points of all tasks final double totalPoints = tasks.stream().parallel().map( task -> task.getPoints() ) // or map( Task::getPoints ) .reduce( 0, Integer::sum );System.out.println( "Total points (all tasks): " + totalPoints ); 這個(gè)例子和第一個(gè)例子很相似,但這個(gè)例子的不同之處在于這個(gè)程序是并行運(yùn)行的,其次使用reduce方法來(lái)算最終的結(jié)果。
下面是這個(gè)例子在控制臺(tái)的輸出:
Total points (all tasks): 26.0 經(jīng)常會(huì)有這個(gè)一個(gè)需求:我們需要按照某種準(zhǔn)則來(lái)對(duì)集合中的元素進(jìn)行分組。Stream也可以處理這樣的需求,下面是一個(gè)例子:
// Group tasks by their status final Map< Status, List< Task > > map = tasks.stream().collect( Collectors.groupingBy( Task::getStatus ) ); System.out.println( map ); 這個(gè)例子的控制臺(tái)輸出如下:
{CLOSED=[[CLOSED, 8]], OPEN=[[OPEN, 5], [OPEN, 13]]} 讓我們來(lái)計(jì)算整個(gè)集合中每個(gè)task分?jǐn)?shù)(或權(quán)重)的平均值來(lái)結(jié)束task的例子。
// Calculate the weight of each tasks (as percent of total points) final Collection< String > result = tasks.stream() // Stream< String >.mapToInt( Task::getPoints ) // IntStream.asLongStream() // LongStream.mapToDouble( points -> points / totalPoints ) // DoubleStream.boxed() // Stream< Double >.mapToLong( weigth -> ( long )( weigth * 100 ) ) // LongStream.mapToObj( percentage -> percentage + "%" ) // Stream< String> .collect( Collectors.toList() ); // List< String > System.out.println( result ); 下面是這個(gè)例子的控制臺(tái)輸出:
[19%, 50%, 30%] 最后,就像前面提到的,Stream API不僅僅處理Java集合框架。像從文本文件中逐行讀取數(shù)據(jù)這樣典型的I/O操作也很適合用Stream API來(lái)處理。下面用一個(gè)例子來(lái)應(yīng)證這一點(diǎn)。
final Path path = new File( filename ).toPath(); try( Stream< String > lines = Files.lines( path, StandardCharsets.UTF_8 ) ) {lines.onClose( () -> System.out.println("Done!") ).forEach( System.out::println ); }

對(duì)一個(gè)stream對(duì)象調(diào)用onClose方法會(huì)返回一個(gè)在原有功能基礎(chǔ)上新增了關(guān)閉功能的stream對(duì)象,當(dāng)對(duì)stream對(duì)象調(diào)用close()方法時(shí),與關(guān)閉相關(guān)的處理器就會(huì)執(zhí)行。

Stream API、Lambda表達(dá)式與方法引用在接口默認(rèn)方法與靜態(tài)方法的配合下是Java 8對(duì)現(xiàn)代軟件開發(fā)范式的回應(yīng)。更多詳情請(qǐng)參考官方文檔。


  • Date/Time API (JSR 310)

Java 8通過(guò)發(fā)布新的Date-Time API (JSR 310)來(lái)進(jìn)一步加強(qiáng)對(duì)日期與時(shí)間的處理。對(duì)日期與時(shí)間的操作一直是Java程序員最痛苦的地方之一。標(biāo)準(zhǔn)的 java.util.Date以及后來(lái)的java.util.Calendar一點(diǎn)沒(méi)有改善這種情況(可以這么說(shuō),它們一定程度上更加復(fù)雜)。

這種情況直接導(dǎo)致了Joda-Time——一個(gè)可替換標(biāo)準(zhǔn)日期/時(shí)間處理且功能非常強(qiáng)大的Java API的誕生。Java 8新的Date-Time API (JSR 310)在很大程度上受到Joda-Time的影響,并且吸取了其精髓。新的java.time包涵蓋了所有處理日期,時(shí)間,日期/時(shí)間,時(shí)區(qū),時(shí)刻(instants),過(guò)程(during)與時(shí)鐘(clock)的操作。在設(shè)計(jì)新版API時(shí),十分注重與舊版API的兼容性:不允許有任何的改變(從java.util.Calendar中得到的深刻教訓(xùn))。如果需要修改,會(huì)返回這個(gè)類的一個(gè)新實(shí)例。

讓我們用例子來(lái)看一下新版API主要類的使用方法。第一個(gè)是Clock類,它通過(guò)指定一個(gè)時(shí)區(qū),然后就可以獲取到當(dāng)前的時(shí)刻,日期與時(shí)間。Clock可以替換System.currentTimeMillis()與TimeZone.getDefault()。

// Get the system clock as UTC offset final Clock clock = Clock.systemUTC(); System.out.println( clock.instant() ); System.out.println( clock.millis() ); 下面是程序在控制臺(tái)上的輸出:
2014-04-12T15:19:29.282Z 1397315969360 我們需要關(guān)注的其他類是LocaleDate與LocalTime。LocaleDate只持有ISO-8601格式且無(wú)時(shí)區(qū)信息的日期部分。相應(yīng)的,LocaleTime只持有ISO-8601格式且無(wú)時(shí)區(qū)信息的時(shí)間部分。LocaleDate與LocalTime都可以從Clock中得到。
// Get the local date and local time final LocalDate date = LocalDate.now(); final LocalDate dateFromClock = LocalDate.now( clock );System.out.println( date ); System.out.println( dateFromClock );// Get the local date and local time final LocalTime time = LocalTime.now(); final LocalTime timeFromClock = LocalTime.now( clock );System.out.println( time ); System.out.println( timeFromClock ); 下面是程序在控制臺(tái)上的輸出:
2014-04-12 2014-04-12 11:25:54.568 15:25:54.568 LocaleDateTime把LocaleDate與LocaleTime的功能合并起來(lái),它持有的是ISO-8601格式無(wú)時(shí)區(qū)信息的日期與時(shí)間。下面是一個(gè) 快速入門 的例子。
// Get the local date/time final LocalDateTime datetime = LocalDateTime.now(); final LocalDateTime datetimeFromClock = LocalDateTime.now( clock );System.out.println( datetime ); System.out.println( datetimeFromClock ); 下面是程序在控制臺(tái)上的輸出:
2014-04-12T11:37:52.309 2014-04-12T15:37:52.309 如果你需要特定時(shí)區(qū)的日期/時(shí)間,那么ZonedDateTime是你的選擇。它持有ISO-8601格式具具有時(shí)區(qū)信息的日期與時(shí)間。下面是一些不同時(shí)區(qū)的例子:
// Get the zoned date/time final ZonedDateTime zonedDatetime = ZonedDateTime.now(); final ZonedDateTime zonedDatetimeFromClock = ZonedDateTime.now( clock ); final ZonedDateTime zonedDatetimeFromZone = ZonedDateTime.now( ZoneId.of( "America/Los_Angeles" ) );System.out.println( zonedDatetime ); System.out.println( zonedDatetimeFromClock ); System.out.println( zonedDatetimeFromZone ); 下面是程序在控制臺(tái)上的輸出:
2014-04-12T11:47:01.017-04:00[America/New_York] 2014-04-12T15:47:01.017Z 2014-04-12T08:47:01.017-07:00[America/Los_Angeles] 最后,讓我們看一下Duration類:在秒與納秒級(jí)別上的一段時(shí)間。Duration使計(jì)算兩個(gè)日期間的不同變的十分簡(jiǎn)單。下面讓我們看一個(gè)這方面的例子。
// Get duration between two dates final LocalDateTime from = LocalDateTime.of( 2014, Month.APRIL, 16, 0, 0, 0 ); final LocalDateTime to = LocalDateTime.of( 2015, Month.APRIL, 16, 23, 59, 59 );final Duration duration = Duration.between( from, to ); System.out.println( "Duration in days: " + duration.toDays() ); System.out.println( "Duration in hours: " + duration.toHours() ); 上面的例子計(jì)算了兩個(gè)日期2014年4月16號(hào)與2014年4月16號(hào)之間的過(guò)程。下面是程序在控制臺(tái)上的輸出:
Duration in days: 365 Duration in hours: 8783

對(duì)Java 8在日期/時(shí)間API的改進(jìn)整體印象是非常非常好的。一部分原因是因?yàn)樗⒃凇熬脩?zhàn)殺場(chǎng)”的Joda-Time基礎(chǔ)上,另一方面是因?yàn)橛脕?lái)大量的時(shí)間來(lái)設(shè)計(jì)它,并且這次程序員的聲音得到了認(rèn)可。更多詳情請(qǐng)參考官方文檔



  • 擴(kuò)展注解的支持

Java 8擴(kuò)展了注解的上下文。現(xiàn)在幾乎可以為任何東西添加注解:局部變量、泛型類、父類與接口的實(shí)現(xiàn),就連方法的異常也能添加注解。下面演示幾個(gè)例子:
package com.javacodegeeks.java8.annotations;import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import java.util.ArrayList; import java.util.Collection;public class Annotations {@Retention( RetentionPolicy.RUNTIME )@Target( { ElementType.TYPE_USE, ElementType.TYPE_PARAMETER } )public @interface NonEmpty { }public static class Holder< @NonEmpty T > extends @NonEmpty Object {public void method() throws @NonEmpty Exception { }}@SuppressWarnings( "unused" )public static void main(String[] args) {final Holder< String > holder = new @NonEmpty Holder< String >(); @NonEmpty Collection< @NonEmpty String > strings = new ArrayList<>(); } }

ElementType.TYPE_USE和ElementType.TYPE_PARAMETER是兩個(gè)新添加的用于描述適當(dāng)?shù)淖⒔馍舷挛牡脑仡愋汀T贘ava語(yǔ)言中,注解處理API也有小的改動(dòng)來(lái)識(shí)別新增的類型注解。



  • Optional

到目前為止,臭名昭著的空指針異常是導(dǎo)致Java應(yīng)用程序失敗的最常見(jiàn)原因。以前,為了解決空指針異常,Google公司著名的Guava項(xiàng)目引入了Optional類,Guava通過(guò)使用檢查空值的方式來(lái)防止代碼污染,它鼓勵(lì)程序員寫更干凈的代碼。受到Google Guava的啟發(fā),Optional類已經(jīng)成為Java 8類庫(kù)的一部分。

Optional實(shí)際上是個(gè)容器:它可以保存類型T的值,或者僅僅保存null。Optional提供很多有用的方法,這樣我們就不用顯式進(jìn)行空值檢測(cè)。更多詳情請(qǐng)參考官方文檔。

我們下面用兩個(gè)小例子來(lái)演示如何使用Optional類:一個(gè)允許為空值,一個(gè)不允許為空值。

Optional< String > fullName = Optional.ofNullable( null ); System.out.println( "Full Name is set? " + fullName.isPresent() ); System.out.println( "Full Name: " + fullName.orElseGet( () -> "[none]" ) ); System.out.println( fullName.map( s -> "Hey " + s + "!" ).orElse( "Hey Stranger!" ) ); 如果Optional類的實(shí)例為非空值的話,isPresent()返回true,否從返回false。為了防止Optional為空值,orElseGet()方法通過(guò)回調(diào)函數(shù)來(lái)產(chǎn)生一個(gè)默認(rèn)值。map()函數(shù)對(duì)當(dāng)前Optional的值進(jìn)行轉(zhuǎn)化,然后返回一個(gè)新的Optional實(shí)例。orElse()方法和orElseGet()方法類似,但是orElse接受一個(gè)默認(rèn)值而不是一個(gè)回調(diào)函數(shù)。下面是這個(gè)程序的輸出:
Full Name is set? false Full Name: [none] Hey Stranger! 讓我們來(lái)看看另一個(gè)例子:
Optional< String > firstName = Optional.of( "Tom" ); System.out.println( "First Name is set? " + firstName.isPresent() ); System.out.println( "First Name: " + firstName.orElseGet( () -> "[none]" ) ); System.out.println( firstName.map( s -> "Hey " + s + "!" ).orElse( "Hey Stranger!" ) ); System.out.println(); 下面是程序的輸出:
First Name is set? true First Name: Tom Hey Tom!

更多詳情請(qǐng)參考官方文檔



  • 方法引用

方法引用提供了非常有用的語(yǔ)法,可以直接引用已有Java類或?qū)ο?#xff08;實(shí)例)的方法或構(gòu)造器。與lambda聯(lián)合使用,方法引用可以使語(yǔ)言的構(gòu)造更緊湊簡(jiǎn)潔,減少冗余代碼。

下面,我們以定義了4個(gè)方法的Car這個(gè)類作為例子,區(qū)分Java中支持的4種不同的方法引用。

public static class Car {public static Car create( final Supplier< Car > supplier ) {return supplier.get();} public static void collide( final Car car ) {System.out.println( "Collided " + car.toString() );}public void follow( final Car another ) {System.out.println( "Following the " + another.toString() );}public void repair() { System.out.println( "Repaired " + this.toString() );} } 第一種方法引用是構(gòu)造器引用,它的語(yǔ)法是Class::new,或者更一般的Class< T >::new。請(qǐng)注意構(gòu)造器沒(méi)有參數(shù)。
final Car car = Car.create( Car::new ); final List< Car > cars = Arrays.asList( car ); 第二種方法引用是靜態(tài)方法引用,它的語(yǔ)法是Class::static_method。請(qǐng)注意這個(gè)方法接受一個(gè)Car類型的參數(shù)。
cars.forEach( Car::collide ); 第三種方法引用是特定類的任意對(duì)象的方法引用,它的語(yǔ)法是Class::method。請(qǐng)注意,這個(gè)方法沒(méi)有參數(shù)。
cars.forEach( Car::repair ); 最后,第四種方法引用是特定對(duì)象的方法引用,它的語(yǔ)法是instance::method。請(qǐng)注意,這個(gè)方法接受一個(gè)Car類型的參數(shù)
final Car police = Car.create( Car::new ); cars.forEach( police::follow ); 運(yùn)行上面的Java程序在控制臺(tái)上會(huì)有下面的輸出(Car的實(shí)例可能不一樣):
Collided com.javacodegeeks.java8.method.references.MethodReferences$Car@7a81197d Repaired com.javacodegeeks.java8.method.references.MethodReferences$Car@7a81197d Following the com.javacodegeeks.java8.method.references.MethodReferences$Car@7a81197d

關(guān)于方法引用的更多詳情請(qǐng)參考官方文檔



  • 重復(fù)注解

自從Java 5引入了注解機(jī)制,這一特性就變得非常流行并且廣為使用。然而,使用注解的一個(gè)限制是相同的注解在同一位置只能聲明一次,不能聲明多次。Java 8打破了這條規(guī)則,引入了重復(fù)注解機(jī)制,這樣相同的注解可以在同一地方聲明多次。

重復(fù)注解機(jī)制本身必須用@Repeatable注解。事實(shí)上,這并不是語(yǔ)言層面上的改變,更多的是編譯器的技巧,底層的原理保持不變。讓我們看一個(gè)快速入門的例子:

package com.javacodegeeks.java8.repeatable.annotations;import java.lang.annotation.ElementType; import java.lang.annotation.Repeatable; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;public class RepeatingAnnotations {@Target( ElementType.TYPE )@Retention( RetentionPolicy.RUNTIME )public @interface Filters {Filter[] value();}@Target( ElementType.TYPE )@Retention( RetentionPolicy.RUNTIME )@Repeatable( Filters.class )public @interface Filter {String value();};@Filter( "filter1" )@Filter( "filter2" )public interface Filterable { }public static void main(String[] args) {for( Filter filter: Filterable.class.getAnnotationsByType( Filter.class ) ) {System.out.println( filter.value() );}} }

正如我們看到的,這里有個(gè)使用@Repeatable( Filters.class )注解的注解類Filter,Filters僅僅是Filter注解的數(shù)組,但Java編譯器并不想讓程序員意識(shí)到Filters的存在。這樣,接口Filterable就擁有了兩次Filter(并沒(méi)有提到Filter)注解。

同時(shí),反射相關(guān)的API提供了新的函數(shù)getAnnotationsByType()來(lái)返回重復(fù)注解的類型(請(qǐng)注意Filterable.class.getAnnotation( Filters.class )經(jīng)編譯器處理后將會(huì)返回Filters的實(shí)例)。

程序輸出結(jié)果如下:

filter1 filter2

更多詳情請(qǐng)參考官方文檔



  • JavaScript引擎Nashorn

Nashorn,一個(gè)新的JavaScript引擎隨著Java 8一起公諸于世,它允許在JVM上開發(fā)運(yùn)行某些JavaScript應(yīng)用。Nashorn就是javax.script.ScriptEngine的另一種實(shí)現(xiàn),并且它們倆遵循相同的規(guī)則,允許Java與JavaScript相互調(diào)用。下面看一個(gè)例子:

ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName( "JavaScript" );System.out.println( engine.getClass().getName() ); System.out.println( "Result:" + engine.eval( "function f() { return 1; }; f() + 1;" ) );

下面是程序在控制臺(tái)上的輸出:

jdk.nashorn.api.scripting.NashornScriptEngine Result: 2



  • Base64

在Java 8中,Base64編碼已經(jīng)成為Java類庫(kù)的標(biāo)準(zhǔn)。它的使用十分簡(jiǎn)單,下面讓我們看一個(gè)例子:
package com.javacodegeeks.java8.base64;import java.nio.charset.StandardCharsets; import java.util.Base64;public class Base64s {public static void main(String[] args) {final String text = "Base64 finally in Java 8!";final String encoded = Base64.getEncoder().encodeToString( text.getBytes( StandardCharsets.UTF_8 ) );System.out.println( encoded );final String decoded = new String( Base64.getDecoder().decode( encoded ),StandardCharsets.UTF_8 );System.out.println( decoded );} } 程序在控制臺(tái)上輸出了編碼后的字符與解碼后的字符:
QmFzZTY0IGZpbmFsbHkgaW4gSmF2YSA4IQ== Base64 finally in Java 8!

Base64類同時(shí)還提供了對(duì)URL、MIME友好的編碼器與解碼器(Base64.getUrlEncoder() / Base64.getUrlDecoder(), Base64.getMimeEncoder() / Base64.getMimeDecoder())。



  • 結(jié)束語(yǔ):

本文寫于java9發(fā)布之后的幾天內(nèi),之所以想寫這篇文章是因?yàn)樽约捍_實(shí)還沒(méi)有掌握清楚java 8的這些新特性,在編程語(yǔ)言呈現(xiàn)爆發(fā)的時(shí)段,java的份額越來(lái)越被擠壓的當(dāng)今,java 8的發(fā)布我認(rèn)為這意味著這是java的一個(gè)轉(zhuǎn)折點(diǎn),意味著java語(yǔ)言再像其他語(yǔ)言學(xué)習(xí),借鑒,這是java語(yǔ)言剛開始的那些年很像。不學(xué)習(xí)就要被淘汰,人如此,語(yǔ)言亦如此。

更多更全的java 8新特性請(qǐng)?jiān)L問(wèn) Java 8新特性終極指南

總結(jié)

以上是生活随笔為你收集整理的Java9发布回顾Java 8的十大新特性的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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

国产91丝袜在线播放动漫 | 日本成人免费在线观看 | 97超碰人人模人人人爽人人爱 | 久久免费在线视频 | 日韩在线观看视频一区二区三区 | 少妇18xxxx性xxxx片 | 91麻豆精品国产91久久久使用方法 | 在线观看成年人 | 在线免费观看黄色小说 | 日韩av午夜在线观看 | 亚洲成av人片在线观看www | 最新国产在线 | 国产高清在线看 | 国产精品99久久久久久小说 | 在线观看 国产 | 深爱五月网 | 久久手机免费视频 | 久久成人精品视频 | 久久免费在线观看 | 国产aa精品| 国产资源在线视频 | 久久99久久99免费视频 | 99精品一区二区三区 | 日韩美一区二区三区 | 色噜噜狠狠狠狠色综合久不 | 成年人免费在线播放 | 欧美成人久久 | 色婷婷亚洲综合 | 国产精品理论片在线观看 | 久久精品一 | 亚洲激情一区二区三区 | 欧美a√大片 | 99精品热| 欧美日韩精品区 | 97在线播放视频 | 日韩视频在线不卡 | 伊人五月天av| a天堂一码二码专区 | 日韩精品中文字幕在线观看 | 操少妇视频 | 日日夜夜免费精品 | 操操操操网 | 日本激情视频中文字幕 | 在线日韩一区 | 亚洲人人精品 | 黄网av在线 | а天堂中文最新一区二区三区 | 国产精品精品国产 | 日日干干 | 日韩在线观看视频一区二区三区 | 欧美精品一级视频 | www.av免费观看 | 91九色精品女同系列 | 97国产人人 | 精品在线亚洲视频 | 精品96久久久久久中文字幕无 | 天天干天天搞天天射 | 久久综合色播五月 | 丰满少妇麻豆av | 亚洲一级二级 | 深爱婷婷 | 91夫妻自拍 | 玖草影院 | 亚洲精品欧美专区 | 四虎国产精品永久在线国在线 | 亚洲日本中文字幕在线观看 | 午夜av一区二区三区 | 国产这里只有精品 | 国产精品综合在线 | 欧美一级性 | 在线a亚洲视频播放在线观看 | 在线观看视频99 | 成年人视频在线 | 日本中文一区二区 | 日本久久电影 | 91精品夜夜 | 99久久精品午夜一区二区小说 | 九九九在线观看视频 | 毛片网站在线看 | www日 | 天天干天天干天天射 | 亚洲特级毛片 | 色多多在线观看 | 久久精品国产一区二区 | 91精品国产自产在线观看 | 亚洲婷婷伊人 | 国产视频一区在线 | 欧美激情综合色综合啪啪五月 | 久久国产香蕉视频 | 99在线视频网站 | 一区二区三区四区五区在线 | 国产一级特黄电影 | 国产高清精品在线观看 | 黄色h在线观看 | 国产精品欧美久久久久久 | 日韩美视频 | 成人国产精品av | 一级片视频在线 | 综合久久网站 | 国内免费的中文字幕 | 成人精品亚洲 | 有没有在线观看av | 一级片色播影院 | 国产美女精品人人做人人爽 | 一区二区理论片 | 麻豆国产网站入口 | 尤物97国产精品久久精品国产 | 十八岁免进欧美 | 欧美激情va永久在线播放 | 天天干人人| 免费国产在线精品 | 一区二区 不卡 | 在线观看日本韩国电影 | 日韩av一区二区在线播放 | av观看免费在线 | 99久久婷婷国产综合亚洲 | 永久免费毛片 | 欧美精品一区二区蜜臀亚洲 | 天天人人综合 | 免费观看性生交大片3 | 久久色网站 | 特黄特黄的视频 | www国产亚洲精品 | 亚洲高清在线精品 | 99热只有精品在线观看 | 夜夜躁日日躁狠狠久久av | 久久精品小视频 | 日韩av看片 | 免费中文字幕在线观看 | 中文字幕资源网在线观看 | 婷婷色网视频在线播放 | 蜜桃视频成人在线观看 | 亚洲综合视频在线播放 | 久久影视中文字幕 | 欧美激情视频免费看 | 福利视频一二区 | 日韩免费电影网站 | 免费色视频在线 | av一级片网站 | 二区在线播放 | 精品国产99| 精品视频在线视频 | 亚洲日日夜夜 | 亚洲片在线资源 | 午夜免费福利视频 | 国产精品1区2区在线观看 | 福利视频第一页 | 成人黄色电影视频 | 欧美日韩不卡一区二区 | 亚洲视频 中文字幕 | 狠狠躁日日躁夜夜躁av | 一区二区三区在线不卡 | 色爱成人网 | 欧美国产大片 | 五月天丁香综合 | 一色屋精品视频在线观看 | 日日爱夜夜爱 | 免费看污污视频的网站 | 黄色免费观看网址 | 日韩电影久久久 | 久久久九九| 91片网| 一区二区三区高清在线 | 91视频在线观看下载 | 久久视频6| 99精品免费久久久久久日本 | av成人免费在线看 | 久久99精品国产 | 色在线网站| 成人免费毛片aaaaaa片 | 久久无码精品一区二区三区 | 在线电影 你懂得 | 国产免费又爽又刺激在线观看 | 不卡精品 | 久久精品123 | 国产在线不卡精品 | 天天干视频在线 | aav在线| 国产伦理精品一区二区 | 看污网站 | 国产精品一区二区在线看 | 亚洲午夜大片 | 国产亚洲在线观看 | 麻豆久久久久久久 | 超碰在线成人 | 久久久久亚洲精品男人的天堂 | 婷婷综合电影 | 精品久久久久久亚洲综合网站 | 国产美女精品在线 | 久久久久国产精品一区 | 天天av天天 | 性色av香蕉一区二区 | 九色91在线| 五月天中文在线 | 在线观看免费av网站 | www操操操 | 中文字幕91视频 | 在线国产视频 | 亚洲第一av在线 | 精品国产一区二区三区久久久蜜臀 | 国语对白少妇爽91 | 亚洲一级电影视频 | 91资源在线播放 | 97色噜噜| 久久66热这里只有精品 | 日韩在线观看一区二区三区 | 亚洲综合丁香 | 久草免费在线观看视频 | 69视频在线播放 | 国产免费久久久久 | 国产精品久久久久久久免费 | 亚洲一级黄色大片 | 亚州av网站 | 黄色大片av | 中文字幕日韩一区二区三区不卡 | 色综合久久精品 | av中文在线播放 | 国产精品一区二区62 | 激情网第四色 | 精品久久久久国产免费第一页 | 蜜臀av免费一区二区三区 | 五月婷婷开心 | 久久久人人人 | 亚洲欧美视频 | 91九色精品国产 | 中国一级特黄毛片大片久久 | 久久久久久久久久久久av | 日本中文字幕视频 | www.五月天 | 国产精品久久久久久电影 | 香蕉在线视频观看 | 人人插人人费 | 欧美激情精品久久久久久免费印度 | 天堂v中文| 国内精品久久久久久 | 日本少妇视频 | 91在线视频导航 | 992tv在线观看网站 | 国产成人三级在线 | 国产精品久久久久国产a级 激情综合中文娱乐网 | 欧美午夜剧场 | 日韩乱码在线 | 在线精品在线 | 国产在线精品二区 | 欧美一级大片在线观看 | 成+人+色综合 | 国产香蕉在线 | 丁香花在线视频观看免费 | 韩国av一区二区 | 国产不卡av在线播放 | 国产视频丨精品|在线观看 国产精品久久久久久久久久久久午夜 | www日 | 日本精品一区二区三区在线观看 | 亚洲国产中文字幕 | 亚洲在线精品视频 | 欧美一区二区三区在线视频观看 | 在线免费黄 | 在线播放精品一区二区三区 | 黄色成年| 亚洲乱亚洲乱亚洲 | 九九热1 | 日韩中文字幕免费视频 | 五月天网页 | 97免费在线观看视频 | 婷婷射五月 | 国产原厂视频在线观看 | 国产精品9区 | 天天摸天天操天天舔 | 日韩1级片 | 欧美日韩伦理一区 | 国产精品自拍在线 | 国产一级做a爱片久久毛片a | 国产精品久久久久久吹潮天美传媒 | 久久中文网 | 中文字幕a∨在线乱码免费看 | 99热在线观看免费 | 久久久久久国产精品 | 最新日韩视频 | 伊人欧美| 久久久精品欧美一区二区免费 | 午夜婷婷在线播放 | 日韩中文字幕免费在线观看 | 综合网天天色 | 在线观看日韩一区 | 日韩av片在线 | 美女视频a美女大全免费下载蜜臀 | 亚洲视频 在线观看 | 中文网丁香综合网 | 黄色一级影院 | 黄色精品一区 | 免费视频91蜜桃 | 中文字幕免费高清av | 国产在线 一区二区三区 | 精品国内 | 日韩精品一区二区三区免费观看视频 | 成人在线免费看视频 | 美国av大片 | 色播五月婷婷 | 日韩av黄| 成年人视频免费在线播放 | 黄色大片视频网站 | 在线三级av| 91精品免费看 | 欧美日韩在线免费观看视频 | 国产美女精品在线 | 五月天婷亚洲天综合网精品偷 | 福利电影久久 | 中文乱幕日产无线码1区 | 久久久久免费精品国产小说色大师 | 国产在线最新 | 91精品国自产在线观看欧美 | 99视频偷窥在线精品国自产拍 | 亚洲成a人片在线www | 欧美另类高潮 | 国产一区二区三区免费在线观看 | 国产99久久久久久免费看 | 黄色中文字幕 | 久久97久久| 欧美经典久久 | 免费看黄在线网站 | 91精品国产欧美一区二区成人 | 亚洲精品视频在线观看免费视频 | 美女福利视频一区二区 | 999视频在线观看 | 国产免费久久精品 | 日本久久精品视频 | 99精品视频免费在线观看 | av免费电影在线 | 日本精品视频免费观看 | 最近在线中文字幕 | 日韩毛片一区 | 日韩在线视频一区二区三区 | 99九九视频 | 毛片99 | 四虎影视精品成人 | 国产精品久久久久免费观看 | 久久亚洲二区 | 欧美激情综合五月 | 欧美另类交人妖 | 五月天av在线 | 字幕网av | 麻豆精品视频在线观看免费 | 日av免费 | 日韩精品在线观看av | 日本婷婷色 | 99999精品视频 | 不卡av电影在线观看 | 日韩肉感妇bbwbbwbbw | 欧美极品在线播放 | 在线观看一区 | 久久视频精品在线观看 | 天天综合色 | 欧美a√在线 | 美女精品 | 六月丁香社区 | 99久久久国产精品免费99 | 欧美在线1 | 玖玖在线看 | 久久精品99视频 | 69av国产 | 国产成人免费av电影 | 国产成人精品三级 | 亚洲第一成网站 | 婷婷六月激情 | 97免费在线观看 | 九九三级毛片 | 91在线免费观看国产 | 久久久久久久久久影院 | 欧美一区影院 | 91精品国产一区二区在线观看 | 国产精品免费一区二区 | 久久免费片 | 91网免费观看 | 深夜免费小视频 | 国产精品午夜久久 | 国产免费激情久久 | 超碰个人在线 | 日韩精品中文字幕在线播放 | 久久99精品久久久久久三级 | se视频网址 | 免费在线观看黄网站 | 色姑娘综合网 | 在线观看色网 | 免费视频一区 | av经典在线 | 婷婷午夜 | 一本色道久久综合亚洲二区三区 | 久久99九九99精品 | 婷婷丁香色综合狠狠色 | av在线电影免费观看 | 国产精品毛片一区视频 | 成人网页在线免费观看 | 国产精品一区在线观看你懂的 | 午夜精品av| 九九热免费在线观看 | 亚洲精品乱码久久久一二三 | 亚洲婷婷伊人 | 久久在线看 | 成人av免费在线 | 久久久国产影视 | 91毛片在线| 色综合久久精品 | 亚洲精品国产精品国自产在线 | 亚洲国产电影在线观看 | 久草在线99 | 日韩欧美视频在线 | 91亚洲国产 | 久草五月 | 欧美一区二区三区特黄 | 国产成人61精品免费看片 | 久久国产色 | 亚洲精选久久 | 91精品国产高清自在线观看 | 亚洲精品一区中文字幕乱码 | 三级黄色大片在线观看 | 亚洲黄色在线观看 | 国产精品综合久久久久久 | 91网站观看 | 欧美精品一区二区蜜臀亚洲 | 精品福利网| 久久久精品国产免费观看同学 | 黄色小说在线观看视频 | 亚洲成a人片在线观看中文 中文字幕在线视频第一页 狠狠色丁香婷婷综合 | 亚洲精品国产第一综合99久久 | 欧美激情精品久久久久久免费印度 | 91黄色免费网站 | 久草网视频在线观看 | 国产精品国产三级国产aⅴ9色 | 一区二区毛片 | 国产色在线观看 | 亚洲成人精品久久 | 亚州精品在线视频 | 91高清完整版在线观看 | 91天堂影院 | 夜夜躁日日躁狠狠躁 | 四虎影视8848aamm | 在线观看免费视频你懂的 | 精品国产_亚洲人成在线 | 黄色av免费 | 韩国精品在线 | 丁香五婷| 成人aaa毛片 | 中文字幕中文 | 精品国产伦一区二区三区观看方式 | 欧美成人在线网站 | 欧美一区三区四区 | 亚洲精品玖玖玖av在线看 | 免费日韩电影 | 欧美极品xxxxx | 免费亚洲一区二区 | 久久精品超碰 | 欧美极品xxxxx | 国产精品成人av久久 | 深夜视频久久 | 成人在线视频网 | 丁香六月五月婷婷 | 免费在线观看av电影 | 美女视频又黄又免费 | av电影免费在线播放 | 97成人在线免费视频 | 日日夜夜噜 | 日韩电影中文字幕在线 | 成人av片在线观看 | av观看免费在线 | 91精品一区二区三区蜜臀 | 天天搞天天干天天色 | 色综合久久五月 | 婷婷爱五月天 | 日韩久久精品一区二区三区 | 中文字幕欲求不满 | www色网站| 欧美精品首页 | 国产精品久久久久久久久久妇女 | 国产高清免费av | 欧美一级电影在线观看 | 国产偷国产偷亚洲清高 | 国产福利中文字幕 | 国产 日韩 欧美 在线 | 日韩在线中文字幕视频 | 免费看的黄网站软件 | 久久久久久久久久网 | 亚州精品成人 | 在线高清av | 黄色动态图xx | 日韩精品在线看 | japanesexxx乱女另类 | 国产又粗又猛又黄又爽视频 | 亚洲精品国产精品99久久 | 欧美a级片免费看 | 天天色天天骑天天射 | 精品久久久久久久 | 国产亚洲精品久久网站 | 午夜av影院 | 欧美久久久久久久久久久久久 | 天天艹天天 | 欧美大片aaa | 婷婷丁香九月 | 国产成人在线精品 | 国产成人1区 | 五月婷婷中文网 | 韩国视频一区二区三区 | 色狠狠综合 | 曰韩精品 | 亚洲免费av一区二区 | 久久深夜福利免费观看 | 精品国产乱码久久久久久1区二区 | 国产精品久久久久久久久久久免费 | 中文字幕成人在线观看 | 亚洲精品国产精品国自产观看 | 久久久www成人免费精品张筱雨 | 国产一二区在线观看 | 亚洲人人网 | 91激情在线视频 | 最新影院| 人人干干人人 | 国产精品不卡 | 亚洲精品久久久蜜桃 | 日韩在线精品一区 | 成人一区在线观看 | 亚洲免费国产 | 亚洲精品乱码久久久久久久久久 | 亚洲四虎 | 香蕉久久久久 | 午夜视频久久久 | 成人精品一区二区三区中文字幕 | 91麻豆国产| 日本三级人妇 | 中文字幕免费国产精品 | 国产精品毛片一区视频播 | 久久九九久久 | 四虎永久免费 | 一本一本久久a久久精品牛牛影视 | 久久网站最新地址 | 久久免费看毛片 | 中文字幕在线观看完整版电影 | 免费人做人爱www的视 | 日韩精品一区在线观看 | 久久国产麻豆 | 99热最新 | 五月天久久激情 | 亚洲女在线| 欧美午夜性 | 日韩久久视频 | 中文字幕视频在线播放 | 五月婷视频| 色诱亚洲精品久久久久久 | 国产99久久精品一区二区永久免费 | 91人人澡 | 日韩在线精品 | 激情黄色av | 亚洲欧美怡红院 | 欧美精品久久久久久久久久白贞 | 日韩免费视频一区二区 | 久久九九九九 | 九九热精品国产 | 日韩专区在线播放 | av一区二区在线观看中文字幕 | a级国产乱理伦片在线播放 久久久久国产精品一区 | 久久99在线| 天天操天天色综合 | 国产夫妻自拍av | 一区二区三区四区久久 | 欧美日韩99| 四虎影视成人永久免费观看亚洲欧美 | 成人毛片在线观看 | 欧美日韩精品在线观看视频 | 精品中文字幕在线 | 成年人国产视频 | 伊人在线视频 | 成人一级片免费看 | 亚洲一区二区视频在线 | 狠狠色丁香久久婷婷综合五月 | 久久久久网址 | 久久视频这里只有精品 | 成人午夜毛片 | 婷婷综合影院 | 在线国产99| 国产亚洲精品成人av久久ww | 日韩动漫免费观看高清完整版在线观看 | 999免费视频| 一本一本久久a久久精品综合 | 伊人午夜视频 | 黄色免费视频在线观看 | 草免费视频 | 欧美视频日韩视频 | 久久成人人人人精品欧 | 精品一区二区在线播放 | 9ⅰ精品久久久久久久久中文字幕 | 精品xxx| 在线观看亚洲成人 | 国产高清在线永久 | 免费观看成人网 | 国产黄a三级三级三级三级三级 | 久草com| 亚洲天堂va | 天天操天天干天天 | 国产99久久99热这里精品5 | 欧美一级电影 | 亚洲婷婷丁香 | 夜夜夜精品 | 一区二区精品视频 | 婷婷丁香激情 | 99久久99久久精品免费 | 亚洲作爱视频 | 91夜夜夜 | 亚洲精品高清视频在线观看 | 欧美激情视频一二区 | 国产999精品久久久 免费a网站 | 精品国产欧美一区二区 | 久久av一区二区三区亚洲 | 奇米影视在线99精品 | 免费日韩三级 | 在线观看国产永久免费视频 | 91香蕉国产在线观看软件 | 激情久久久久久久久久久久久久久久 | 国产亚洲午夜高清国产拍精品 | 在线免费观看黄色 | 91热视频 | 一级片免费观看视频 | 在线观看精品黄av片免费 | 国内精品久久久久影院一蜜桃 | 国产又粗又猛又黄又爽视频 | 五月婷婷在线观看视频 | 99久久精品国产亚洲 | 国内成人综合 | 日韩电影精品一区 | 国产69久久 | 国产在线欧美 | 中文字幕在线观看一区二区三区 | 最近中文字幕视频完整版 | 永久精品视频 | 色天天久久 | 亚洲精品免费在线视频 | 日韩国产精品久久 | 精品999在线观看 | 日韩免费在线视频观看 | 99久久精品久久久久久清纯 | 久久成年视频 | 日韩字幕| 婷婷精品国产欧美精品亚洲人人爽 | 久久午夜影院 | 亚洲国产午夜视频 | 西西大胆免费视频 | 91免费国产在线观看 | 天天干中文字幕 | 亚洲色视频 | 日韩av电影一区 | 最近中文字幕免费 | 日韩免费电影一区二区 | www.色爱| 一区二区精品国产 | 欧美一区二区伦理片 | 久久国内精品99久久6app | 日韩中文字幕免费视频 | 欧美日韩国产一区 | 国产r级在线观看 | 久久天堂亚洲 | 国产成人免费在线 | 国产精品丝袜久久久久久久不卡 | 中文字幕一区二区三区久久 | 日本黄色免费网站 | 国产精品欧美日韩在线观看 | 色婷婷综合在线 | 色综合久久88色综合天天6 | 久久99免费视频 | 国产精品 视频 | 免费在线观看不卡av | 91av官网| 久草视频视频在线播放 | 亚洲黄色三级 | 国产精品久久 | 日韩中文字幕在线观看 | 精品五月天 | 色姑娘综合 | 国产精品一区电影 | 亚洲国产午夜精品 | 日韩免费高清在线观看 | 国产精品一二 | 亚洲五月综合 | 国产在线观看污片 | 久久99免费视频 | 8x成人在线| 在线观看中文字幕一区二区 | 国产一区二区中文字幕 | 亚州成人av在线 | 国产精品ssss在线亚洲 | 激情伊人五月天久久综合 | 少妇bbw揉bbb欧美 | 亚洲国产丝袜在线观看 | 成人免费视频播放 | 在线电影播放 | 一区二区 不卡 | 亚洲人成在线电影 | 国产大片免费久久 | 午夜在线资源 | 精品夜夜嗨av一区二区三区 | 一区二区视频在线观看免费 | 成人av动漫在线 | 国产黄色片免费看 | 日韩精品一区二区三区在线视频 | 久久艹影院 | 色香网 | 国产一级精品视频 | 久久精品国产一区二区电影 | 91.麻豆视频 | 国产成人免费av电影 | 国产成人av| 91av视频网 | 嫩草伊人久久精品少妇av | 欧美日韩免费看 | 九九热视频在线免费观看 | 最新91在线视频 | 国产午夜免费视频 | 国产精品门事件 | 国产91九色蝌蚪 | 96香蕉视频 | 91精品免费视频 | 日日爽天天操 | 欧美日韩国产在线 | 欧美久久影院 | 免费a网址| av在线最新 | 曰韩精品 | 狠狠色网| 亚洲国产成人高清精品 | 久久精品香蕉 | 国产成人精品久 | 天天操天天艹 | 色网站视频 | 天天艹日日干 | 97人人添人澡人人爽超碰动图 | 国产在线观看一 | 黄污污网站 | 蜜臀av性久久久久av蜜臀妖精 | 美女在线观看网站 | 国色天香永久免费 | 国产91精品久久久久 | 美女视频又黄又免费 | 国内精品福利视频 | 久久午夜网 | 免费观看成人 | 亚洲国产精品视频 | 欧美成人影音 | 日韩剧 | 国产精品久久久久久久妇 | 国产一区二区视频在线播放 | 五月婷婷激情六月 | 少妇激情久久 | 最近免费在线观看 | 99精品视频精品精品视频 | 国产亚洲精品xxoo | 五月婷婷在线观看 | 丁香久久综合 | 婷婷激情在线 | 国产精品剧情在线亚洲 | 91九色最新 | 高清不卡一区二区在线 | 999成人精品| 在线看黄色的网站 | 精品视频资源站 | 免费看十八岁美女 | japanesexxxxfreehd乱熟 | 人人讲下载 | 在线视频免费观看 | 国产高清在线看 | 九九久久婷婷 | 成人在线免费观看视视频 | 中文av影院 | 精品主播网红福利资源观看 | 天天色天 | 97人人看 | 免费日韩三级 | 99精品福利视频 | 欧美精品你懂的 | 成人午夜电影在线观看 | 日韩免费在线视频观看 | 欧美aa一级 | 日韩av看片| 91免费黄视频 | 久久看片网站 | 综合激情网... | 五月黄色 | 久久这里只有精品首页 | 亚洲精品国久久99热 | 99爱在线观看 | 久久精品视频免费观看 | 视频三区在线 | 欧美少妇xxx | 国产亚洲在线 | 午夜视频在线观看一区二区三区 | 国产在线超碰 | 丁香六月在线观看 | 日韩一级精品 | 亚洲欧美日韩一区二区三区在线观看 | 欧美日韩国产页 | 精品免费一区 | 国产99久久久国产精品 | 日韩欧美在线视频一区二区三区 | 久久精品中文字幕一区二区三区 | 国产剧在线观看片 | 综合色婷婷 | 亚洲精品系列 | 可以免费观看的av片 | 精品日韩在线 | 胖bbbb搡bbbb擦bbbb | 色视频在线免费观看 | 97精品国产97久久久久久久久久久久 | 黄色三级在线 | 亚洲欧美精品一区二区 | 美女啪啪图片 | 午夜视频欧美 | 亚洲精品久久视频 | 91| 亚洲视频在线播放 | 在线观看av网 | 久久久久久国产精品 | av成年人电影 | 天天插天天狠 | 成人免费影院 | 黄色一级大片免费看 | 亚洲精品乱码久久久久久写真 | 成人亚洲网 | 成人av久久 | 豆豆色资源网xfplay | 中文字幕色综合网 | 色吊丝av中文字幕 | 精品视频999 | 九九热精品视频在线观看 | 一区二区欧美在线观看 | www夜夜操| 婷婷去俺也去六月色 | 亚洲国产精品va在线看 | 97在线视频免费 | 免费看的黄色录像 | 欧美久久久久 | 日韩欧美在线高清 | 91九色最新地址 | zzijzzij亚洲日本少妇熟睡 | 日产乱码一二三区别免费 | 91手机电视 | 亚洲欧洲精品在线 | 久久久亚洲电影 | 久久国产热视频 | 91超在线 | av在线影片 | 在线国产小视频 | 久久草草热国产精品直播 | 欧美 日韩精品 | 免费高清在线观看成人 | 最新中文字幕在线观看视频 | 国产成人a亚洲精品 | 9色在线视频 | 99视频精品免费视频 | 99久久精品国产亚洲 | 日韩综合一区二区三区 | 国产成人精品久久 | 国产 欧美 日本 | 激情欧美网 | 全久久久久久久久久久电影 | 免费高清在线视频一区· | 免费观看9x视频网站在线观看 | 久久优 | av免费观看网址 | 亚洲免费成人 | 国产精品欧美久久久久无广告 | 日韩性久久 | 欧美少妇影院 | 曰韩在线 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 日本狠狠干 | av日韩国产 | 精品国产欧美一区二区三区不卡 | 午夜私人影院久久久久 | 亚洲国产日韩欧美在线 | 久久精品人人做人人综合老师 | 成人影视免费看 | 97在线成人 | 在线观看免费日韩 | 97国产视频| 在线日韩精品视频 | 五月婷婷天堂 | 91精品国产91久久久久 | 国产免费视频在线 | 综合久久综合久久 | 亚洲欧美日韩在线一区二区 | 国产麻豆电影在线观看 | 色婷婷av一区 | 在线视频 你懂得 | 久久久久久久久久国产精品 | 在线观av| 一区二区三区日韩在线观看 | 亚洲福利精品 | 国产精品18久久久久久久网站 | 婷婷在线播放 | 国产精品乱码久久久久久1区2区 | 久久久电影 | 91大神在线观看视频 | 欧美激情精品久久 | 欧美一区中文字幕 | 国产区第一页 | 国产精品美女视频网站 | 在线免费观看成人 | 成人国产一区二区 | 久久99精品久久久久久秒播蜜臀 | 亚洲精品在线资源 | 亚洲久在线 | 国产手机视频 | 成人精品电影 | 久久免费看av | 久久免费视频在线观看6 | av电影一区二区 | 夜色资源站国产www在线视频 | 黄色国产在线 | 婷婷开心久久网 | 亚洲精品乱码久久久久久 | 99精品欧美一区二区三区黑人哦 | 久产久精国产品 | 国产精品免费在线观看视频 | 91麻豆视频网站 | 五月天久久精品 | 黄色精品一区 | 色综合久久五月 | 日韩电影在线一区 | 亚洲国产精品传媒在线观看 | 特级西西444www高清大视频 | 亚洲少妇激情 | 999久久久免费视频 午夜国产在线观看 | 人人要人人澡人人爽人人dvd | 美女视频黄的免费的 | 亚州精品成人 | 久久久在线视频 | 69av视频在线 | 日日摸日日爽 | 日日综合 | 欧美激情视频一区二区三区免费 | 免费h视频| av不卡中文 | 精品免费在线视频 | 日日夜夜操av | 狠狠操影视 | 天天操天天射天天爽 | 欧美专区日韩专区 | 五月天天av| 99久久精品无免国产免费 | 久久不卡国产精品一区二区 | 麻豆视频国产精品 | 日韩在线不卡视频 | 日韩电影中文 | 美女黄频在线观看 | 天天爱天天射天天干天天 | a级国产乱理伦片在线播放 久久久久国产精品一区 | 五月天网页| 亚洲国产黄色片 | 日韩av中文字幕在线免费观看 | 在线观看亚洲专区 | 免费欧美精品 | 天天操天天操天天操天天操天天操天天操 | 国产高清不卡 | 日日干网| 最新中文字幕在线播放 | 中文字幕专区高清在线观看 | 中文字幕久久精品亚洲乱码 | 国产精品18videosex性欧美 | 亚洲精品一区二区18漫画 | 日韩精品一区二区三区视频播放 | 免费在线观看日韩欧美 | 视频 国产区 | 在线观看亚洲精品 | 91av原创| 中文字幕在线观看网站 | 国产一区二区日本 | a午夜在线 | 97免费视频在线 | 免费看污的网站 | 91自拍成人| 中文字幕精品在线 | 99国产高清| 日本黄色免费观看 | 亚洲a色 | 久久成人资源 | 深爱婷婷久久综合 | 四虎国产精品免费观看视频优播 | 四虎在线影视 | 国产91精品一区二区麻豆亚洲 | 免费观看黄 | 缴情综合网五月天 | 亚洲精品国产精品国自产 | 女人18毛片90分钟 | 免费看色的网站 | 中文字幕观看在线 | 亚洲欧美国产精品18p | 国产精品综合av一区二区国产馆 | 久久国产精品免费看 | 国产在线精品二区 | 日韩精品视频在线观看网址 | 99av国产精品欲麻豆 | 久久91久久久久麻豆精品 | 人人躁|