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

歡迎訪問 生活随笔!

生活随笔

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

java

[转载] Java9发布回顾Java 8的十大新特性

發(fā)布時(shí)間:2025/3/11 java 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [转载] Java9发布回顾Java 8的十大新特性 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

參考鏈接: Java中的DoubleStream mapToObj()

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

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

??

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

??

?

?

?Lambda表達(dá)式??

?Lambda表達(dá)式(也稱為閉包)是整個Java 8發(fā)行版中最受期待的在Java語言層面上的改變,Lambda允許把函數(shù)作為一個方法的參數(shù)(函數(shù)作為參數(shù)傳遞進(jìn)方法中),或者把代碼看成數(shù)據(jù):函數(shù)式程序員對這一概念非常熟悉。在JVM平臺上的很多語言(Groovy,Scala,……)從一開始就有Lambda,但是Java程序員不得不使用毫無新意的匿名類來代替lambda。? 關(guān)于Lambda設(shè)計(jì)的討論占用了大量的時(shí)間與社區(qū)的努力。可喜的是,最終找到了一個平衡點(diǎn),使得可以使用一種即簡潔又緊湊的新方式來構(gòu)造Lambdas。在最簡單的形式中,一個lambda可以由用逗號分隔的參數(shù)列表、–>符號與函數(shù)體三部分表示。例如:??

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

?

?

請注意參數(shù)e的類型是由編譯器推測出來的。同時(shí),你也可以通過把參數(shù)類型與參數(shù)包括在括號中的形式直接給出參數(shù)的類型:?

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

?

在某些情況下lambda的函數(shù)體會更加復(fù)雜,這時(shí)可以把函數(shù)體放到在一對花括號中,就像在Java中定義普通函數(shù)一樣。例如:?

Arrays.asList( "a", "b", "d" ).forEach( e -> {

? ? System.out.print( e );

? ? System.out.print( e );

} );

?Lambda可以引用類的成員變量與局部變量(如果這些變量不是final的話,它們會被隱含的轉(zhuǎn)為final,這樣效率更高)。例如,下面兩個代碼片段是等價(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可能會返回一個值。返回值的類型也是由編譯器推測出來的。如果lambda的函數(shù)體只有一行的話,那么沒有必要顯式使用return語句。下面兩個代碼片段是等價(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;

} );

?

語言設(shè)計(jì)者投入了大量精力來思考如何使現(xiàn)有的函數(shù)友好地支持lambda。最終采取的方法是:增加函數(shù)式接口的概念。函數(shù)式接口就是一個具有一個方法的普通接口。像這樣的接口,可以被隱式轉(zhuǎn)換為lambda表達(dá)式。java.lang.Runnable與java.util.concurrent.Callable是函數(shù)式接口最典型的兩個例子。在實(shí)際使用過程中,函數(shù)式接口是容易出錯的:如有某個人在接口定義中增加了另一個方法,這時(shí),這個接口就不再是函數(shù)式的了,并且編譯過程也會失敗。為了克服函數(shù)式接口的這種脆弱性并且能夠明確聲明接口作為函數(shù)式接口的意圖,Java 8增加了一種特殊的注解@FunctionalInterface(Java 8中所有類庫的已有接口都添加了@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)。它具有吸引越來越多程序員到Java平臺上的潛力,并且能夠在純Java語言環(huán)境中提供一種優(yōu)雅的方式來支持函數(shù)式編程。更多詳情可以參考官方文檔。?

??

??

?

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

?Java 8用默認(rèn)方法與靜態(tà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)方法則沒有這個要求。相反,每個接口都必須提供一個所謂的默認(rèn)實(shí)現(xiàn),這樣所有的接口實(shí)現(xiàn)者將會默認(rèn)繼承它(如果有必要的話,可以覆蓋這個默認(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 {

? ? @Override

? ? public String notRequired() {

? ? ? ? return "Overridden implementation";

? ? }

}

?

?

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

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

private interface DefaulableFactory {

? ? // Interfaces now allow static methods

? ? static 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() );

}

這個程序的控制臺輸出如下:

?

Default implementation

Overridden implementation

?

在JVM中,默認(rèn)方法的實(shí)現(xiàn)是非常高效的,并且通過字節(jié)碼指令為方法調(diào)用提供了支持。默認(rèn)方法允許繼續(xù)使用現(xiàn)有的Java接口,而同時(shí)能夠保障正常的編譯過程。這方面好的例子是大量的方法被添加到j(luò)ava.util.Collection接口中去:stream(),parallelStream(),forEach(),removeIf(),……?

?

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

官方文檔

?

?

?

?

?Stream??

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

?Stream API極大簡化了集合框架的處理(但它的處理的范圍不僅僅限于集合框架的處理,這點(diǎ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;

? ? ? ? }

? ? ? ? ?

? ? ? ? @Override

? ? ? ? public String toString() {

? ? ? ? ? ? return String.format( "[%s, %d]", status, points );

? ? ? ? }

? ? }

}

Task類有一個分?jǐn)?shù)的概念(或者說是偽復(fù)雜度),其次是還有一個值可以為OPEN或CLOSED的狀態(tài).讓我們引入一個Task的小集合作為演示例子:?

final Collection< Task > tasks = Arrays.asList(

? ? new Task( Status.OPEN, 5 ),

? ? new Task( Status.OPEN, 13 ),

? ? new Task( Status.CLOSED, 8 )?

);

我們下面要討論的第一個問題是所有狀態(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 );

程序在控制臺上的輸出如下:?

Total points: 18?

?

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

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

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

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

?stream另一個有價(jià)值的地方是能夠原生支持并行處理。讓我們來看看這個算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 );

這個例子和第一個例子很相似,但這個例子的不同之處在于這個程序是并行運(yùn)行的,其次使用reduce方法來算最終的結(jié)果。

?

下面是這個例子在控制臺的輸出:?

Total points (all tasks): 26.0

經(jīng)常會有這個一個需求:我們需要按照某種準(zhǔn)則來對集合中的元素進(jìn)行分組。Stream也可以處理這樣的需求,下面是一個例子:?

// Group tasks by their status

final Map< Status, List< Task > > map = tasks

? ? .stream()

? ? .collect( Collectors.groupingBy( Task::getStatus ) );

System.out.println( map );

這個例子的控制臺輸出如下:?

{CLOSED=[[CLOSED, 8]], OPEN=[[OPEN, 5], [OPEN, 13]]}

讓我們來計(jì)算整個集合中每個task分?jǐn)?shù)(或權(quán)重)的平均值來結(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 );

下面是這個例子的控制臺輸出:?

[19%, 50%, 30%]

最后,就像前面提到的,Stream API不僅僅處理Java集合框架。像從文本文件中逐行讀取數(shù)據(jù)這樣典型的I/O操作也很適合用Stream API來處理。下面用一個例子來應(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 );

}?

?

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

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

? ?

?

?

?Date/Time API (JSR 310)??

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

?這種情況直接導(dǎo)致了Joda-Time——一個可替換標(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),過程(during)與時(shí)鐘(clock)的操作。在設(shè)計(jì)新版API時(shí),十分注重與舊版API的兼容性:不允許有任何的改變(從java.util.Calendar中得到的深刻教訓(xùn))。如果需要修改,會返回這個類的一個新實(shí)例。?

?讓我們用例子來看一下新版API主要類的使用方法。第一個是Clock類,它通過指定一個時(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() );

下面是程序在控制臺上的輸出:

?

2014-04-12T15:19:29.282Z

1397315969360

我們需要關(guān)注的其他類是LocaleDate與LocalTime。LocaleDate只持有ISO-8601格式且無時(shí)區(qū)信息的日期部分。相應(yīng)的,LocaleTime只持有ISO-8601格式且無時(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 );

下面是程序在控制臺上的輸出:

?

2014-04-12

2014-04-12

11:25:54.568

15:25:54.568

LocaleDateTime把LocaleDate與LocaleTime的功能合并起來,它持有的是ISO-8601格式無時(shí)區(qū)信息的日期與時(shí)間。下面是一個

快速入門

的例子。

?

// Get the local date/time

final LocalDateTime datetime = LocalDateTime.now();

final LocalDateTime datetimeFromClock = LocalDateTime.now( clock );

? ? ? ? ?

System.out.println( datetime );

System.out.println( datetimeFromClock );

下面是程序在控制臺上的輸出:

?

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 );

下面是程序在控制臺上的輸出:

?

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類:在秒與納秒級別上的一段時(shí)間。Duration使計(jì)算兩個日期間的不同變的十分簡單。下面讓我們看一個這方面的例子。

?

// 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ì)算了兩個日期2014年4月16號與2014年4月16號之間的過程。下面是程序在控制臺上的輸出:

?

Duration in days: 365

Duration in hours: 8783?

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

??

?

?

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

Java 8擴(kuò)展了注解的上下文。現(xiàn)在幾乎可以為任何東西添加注解:局部變量、泛型類、父類與接口的實(shí)現(xiàn),就連方法的異常也能添加注解。下面演示幾個例子:?

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是兩個新添加的用于描述適當(dāng)?shù)淖⒔馍舷挛牡脑仡愋汀T贘ava語言中,注解處理API也有小的改動來識別新增的類型注解。?

??

??

?

?Optional??

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

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

?我們下面用兩個小例子來演示如何使用Optional類:一個允許為空值,一個不允許為空值。??

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()方法通過回調(diào)函數(shù)來產(chǎn)生一個默認(rèn)值。map()函數(shù)對當(dāng)前Optional的值進(jìn)行轉(zhuǎn)化,然后返回一個新的Optional實(shí)例。orElse()方法和orElseGet()方法類似,但是orElse接受一個默認(rèn)值而不是一個回調(diào)函數(shù)。下面是這個程序的輸出:?

Full Name is set? false

Full Name: [none]

Hey Stranger!

讓我們來看看另一個例子:

?

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!

?

更多詳情請參考官方文檔?

??

??

?

?方法引用??

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

?下面,我們以定義了4個方法的Car這個類作為例子,區(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)造器引用,它的語法是Class::new,或者更一般的Class< T >::new。請注意構(gòu)造器沒有參數(shù)。?

final Car car = Car.create( Car::new );

final List< Car > cars = Arrays.asList( car );

第二種方法引用是靜態(tài)方法引用,它的語法是Class::static_method。請注意這個方法接受一個Car類型的參數(shù)。?

cars.forEach( Car::collide );

第三種方法引用是特定類的任意對象的方法引用,它的語法是Class::method。請注意,這個方法沒有參數(shù)。?

cars.forEach( Car::repair );

最后,第四種方法引用是特定對象的方法引用,它的語法是instance::method。請注意,這個方法接受一個Car類型的參數(shù)?

final Car police = Car.create( Car::new );

cars.forEach( police::follow );

運(yùn)行上面的Java程序在控制臺上會有下面的輸出(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)于方法引用的更多詳情請參考官方文檔。?

??

??

?

?重復(fù)注解??

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

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

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() );

? ? ? ? }

? ? }

}

?

?

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

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

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

filter1

filter2

?

更多詳情請參考官方文檔?

??

??

?

?JavaScript引擎Nashorn??

?

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

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;" ) );?

?

?下面是程序在控制臺上的輸出:?

jdk.nashorn.api.scripting.NashornScriptEngine

Result: 2?

??

??

?

?Base64??

在Java 8中,Base64編碼已經(jīng)成為Java類庫的標(biāo)準(zhǔn)。它的使用十分簡單,下面讓我們看一個例子:?

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 );

? ? }

}

程序在控制臺上輸出了編碼后的字符與解碼后的字符:

?

QmFzZTY0IGZpbmFsbHkgaW4gSmF2YSA4IQ==

Base64 finally in Java 8!?

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

??

?

?

?結(jié)束語:??

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

?

?

更多更全的java 8新特性請?jiān)L問?

Java 8新特性終極指南

總結(jié)

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

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

欧美午夜一区二区福利视频 | 又黄又爽又色无遮挡免费 | 91在线看| 91亚洲成人 | 精品在线播放 | 国产一区二区电影在线观看 | 日本中文字幕免费观看 | 天天干天天干天天色 | a在线视频v视频 | 狠狠狠狠狠色综合 | 国产精品久久99精品毛片三a | 亚洲一区二区视频在线 | 亚洲欧美日韩国产精品一区午夜 | 久久久久久免费网 | 丰满少妇一级 | 91精品免费视频 | 精品久久久久久久久中文字幕 | 久草爱| 在线免费高清一区二区三区 | 六月激情| 亚洲综合欧美日韩狠狠色 | 久久国产露脸精品国产 | 9999精品| 狠狠狠狠狠狠狠狠 | 国产色婷婷精品综合在线手机播放 | zzijzzij日本成熟少妇 | 四虎影视久久久 | 日韩精品免费一区二区在线观看 | 成年美女黄网站色大片免费看 | 久久深夜 | 少妇bbw搡bbbb搡bbb | 久久久久国产一区二区三区 | 国产精品大片免费观看 | 国产伦精品一区二区三区高清 | 国产欧美综合在线观看 | 国产99免费 | 久久手机免费观看 | 一个色综合网站 | 日女人免费视频 | 中文字幕 国产视频 | 成人免费视频免费观看 | 狠狠干夜夜操 | 国产超碰在线 | 激情视频久久 | 五月婷婷激情网 | 狠狠的干狠狠的操 | 亚洲视频一区二区三区在线观看 | 成 人 黄 色视频免费播放 | 亚洲黄色片一级 | 免费看毛片在线 | 久久久国产精品久久久 | 国产精品美女在线 | 国产一区福利 | 婷婷综合av| 日韩影视在线观看 | 亚洲精品久久久久久国 | 日韩黄色在线 | 久久精品视频在线免费观看 | 精品国产乱码久久久久久浪潮 | 2019中文字幕网站 | 国产小视频在线免费观看 | 精品国产aⅴ一区二区三区 在线直播av | 日韩av电影中文字幕 | 天天曰天天射 | 国产色综合 | 久久综合色播五月 | 日韩精品免费一区二区 | 日本最大色倩网站www | 免费在线色电影 | 亚洲国产成人精品久久 | 不卡精品 | 久久99九九99精品 | 日韩av中文字幕在线 | 亚洲精品视频偷拍 | 日韩精品无 | 黄网站色成年免费观看 | 久久免费毛片 | 97超碰色偷偷| 久久精品视 | 欧美日韩三级在线观看 | 免费一级片在线 | 亚洲精品在线观看免费 | 日本在线精品视频 | 日韩在线观看a | 欧美aa在线 | 国产精品久久久久久久久久免费看 | 天天操狠狠操夜夜操 | 欧美日韩网址 | 天天干天天上 | 日韩免费二区 | 香蕉91视频 | 美女久久视频 | 99久久精品午夜一区二区小说 | 91麻豆精品 | 精品一区av| 国产女教师精品久久av | 97精品在线 | 99久久激情视频 | 午夜成人免费电影 | 最近日本中文字幕a | 伊人网综合在线观看 | 欧美日高清视频 | 日韩高清www | 久久久久国产精品免费免费搜索 | 日韩免费观看av | av高清一区二区三区 | 在线免费观看一区二区三区 | 成人在线视频一区 | 欧美视频不卡 | 一区二区中文字幕在线播放 | 久久手机免费视频 | 国产视频中文字幕 | 欧美有色 | 97国产精品久久 | 国产小视频在线观看免费 | 日韩欧美专区 | 91在线成人| 开心激情网五月天 | 亚洲成av人片在线观看www | 国产成人av电影 | 九九爱免费视频 | 手机看片久久 | 激情av资源网 | 成人91免费视频 | 91麻豆产精品久久久久久 | 日本护士三级少妇三级999 | 色婷婷在线播放 | 国产一区视频导航 | 中文字幕av在线电影 | 免费看三级网站 | 综合久久久久 | 亚洲另类视频在线观看 | 日韩欧美精品在线观看视频 | 在线免费观看黄色av | 国产亚洲视频在线 | 99热都是精品 | 国产热re99久久6国产精品 | 2023年中文无字幕文字 | 天天摸天天舔 | 亚洲年轻女教师毛茸茸 | 国产精品正在播放 | 97精品国产91久久久久久 | 中国一区二区视频 | 96久久久 | 午夜精品一区二区三区免费视频 | 成在线播放 | 日韩欧美视频在线 | 天堂v中文 | 成人一级免费电影 | 黄色av网站在线观看免费 | 国产在线探花 | 五月天色网站 | 国产精品96久久久久久吹潮 | 91九色网址| 亚洲欧美日韩精品一区二区 | 成年在线观看 | 国产精品一区二区久久 | 99色在线观看 | 国产精品3区| 狠狠色丁香 | 天天色天天操天天爽 | 国产人成一区二区三区影院 | 在线视频观看亚洲 | 亚洲黄色免费在线 | 九色91福利 | 日本一区二区不卡高清 | 国产小视频在线观看 | 91视频 - v11av | 色狠狠婷婷| 岛国精品一区二区 | 久草电影在线观看 | 黄色视屏免费在线观看 | 友田真希av | 久草国产在线观看 | 国产成人61精品免费看片 | 久久久精品一区二区三区 | 国产xx在线| 色橹橹欧美在线观看视频高清 | 999电影免费在线观看2020 | 亚洲国产精品成人综合 | 在线小视频| 久久综合久久综合久久综合 | 国产理论影院 | 手机看国产毛片 | 99精品免费在线观看 | 808电影免费观看三年 | 久久免费视频6 | 亚洲更新最快 | 国产一区二区三精品久久久无广告 | 中文字幕精品久久 | 蜜桃久久久 | 成人午夜在线观看 | 永久黄网站色视频免费观看w | 中文字幕永久在线 | av日韩国产| 中文字幕免费成人 | 久久婷综合 | 韩国av电影在线观看 | 一级特黄aaa大片在线观看 | 久久免费毛片视频 | 久久激情精品 | 丁香国产视频 | 免费污片| 欧美一级久久久久 | 国产精品11 | 天天天天射 | 91超在线| 97精品久久人人爽人人爽 | 日韩成人在线免费观看 | 91精品久久香蕉国产线看观看 | 五月婷婷六月丁香在线观看 | 成人日韩av | 日韩特级毛片 | 日韩com| 日韩欧美在线高清 | 最近能播放的中文字幕 | www.五月天婷婷.com | 免费a v观看| 91看片淫黄大片在线播放 | 97国产在线视频 | 日韩av中文在线观看 | 500部大龄熟乱视频 欧美日本三级 | 一区二区三区日韩在线观看 | 狠狠色丁香婷婷综合基地 | 91麻豆免费视频 | 欧美一区二区三区特黄 | 超碰在线色 | 国产中文字幕在线 | 国产五月婷婷 | 日韩综合一区二区 | 国产一二三在线视频 | 日韩网站在线免费观看 | 国产在线无 | 久久精品一区二区三区国产主播 | 黄色免费视频在线观看 | 一区二区三区动漫 | 亚洲综合在线视频 | 成 人 黄 色 免费播放 | 激情久久婷婷 | 久久天天操 | 中文字幕国产在线 | 欧美日韩一区二区免费在线观看 | www日韩高清 | 精品免费观看 | 日日操天天射 | 日本爱爱片 | 国产永久免费高清在线观看视频 | 婷婷激情综合五月天 | 免费亚洲精品 | 日韩中文字幕在线不卡 | 亚洲国产精品人久久电影 | 五月天激情综合网 | 欧美日本日韩aⅴ在线视频 插插插色综合 | 视频国产一区二区三区 | 久久精品网站视频 | 伊人伊成久久人综合网小说 | 综合网在线视频 | 久久久国产精品一区二区三区 | 日韩一二三 | 在线视频你懂 | 国产日韩欧美网站 | 激情 亚洲| 亚洲精品h | 天天干天天干天天干 | 色婷婷综合久久久 | 99久久久久久久久 | 亚洲高清视频在线观看免费 | 成人中文字幕av | 国产亚洲精品美女 | 韩国精品福利一区二区三区 | 日日操天天操夜夜操 | 国产人成一区二区三区影院 | 国产精品福利小视频 | 欧美 日韩 国产 成人 在线 | 久久精品久久久久电影 | 夜夜操天天干, | 欧美作爱视频 | 久久久久免费精品国产小说色大师 | 日本久久片 | 日本精品午夜 | 欧美成人按摩 | 国产精品12 | 日韩区在线观看 | 在线一二区 | 一级一片免费看 | 国产亚洲日| 日韩va在线观看 | 97人人看 | 亚洲精品久久久蜜桃直播 | 国产在线中文字幕 | 日韩免费福利 | 日韩视频免费在线 | 丁香久久久 | 一区二区三区四区五区在线视频 | 69精品 | 福利电影久久 | 亚洲女人av | 97电影网站| 日日干夜夜骑 | 亚洲一区二区三区miaa149 | 国产69精品久久99不卡的观看体验 | 91成人久久 | 一区二区三区在线免费观看视频 | www.夜夜爽 | 国产中文视 | 91人人揉日日捏人人看 | 日韩av网页 | 免费在线国产视频 | 91免费网 | 97色在线观看免费视频 | 在线 国产 日韩 | 99精品免费在线观看 | 亚洲人人av | 天天操天天干天天综合网 | 欧美日本在线视频 | 91高清视频免费 | 99久久久成人国产精品 | 91欧美国产 | 精品视频免费看 | 亚洲精品白浆高清久久久久久 | 久久久久久毛片 | 五月综合色 | 日本不卡一区二区 | 久久精品久久99精品久久 | 在线免费观看欧美日韩 | 国产中文伊人 | 久草视频中文在线 | 久久免费国产精品 | 美女视频免费精品 | 在线免费观看黄色 | 香蕉网站在线观看 | 国产在线91在线电影 | 永久中文字幕 | 欧美福利精品 | 婷婷六月丁 | 97精品国产手机 | 国产日韩欧美在线免费观看 | 久久精品com | 91激情 | 久久精品一二三区 | 视频国产精品 | zzijzzij亚洲日本少妇熟睡 | 国产精品18久久久 | 国产精品 中文字幕 亚洲 欧美 | 绯色av一区 | 一区二区视频播放 | 香蕉视频最新网址 | 国产黄影院色大全免费 | 丁香六月婷婷激情 | 亚洲国产成人av网 | av不卡免费在线观看 | 手机在线免费av | 808电影免费观看三年 | 免费看黄色大全 | 国产精品久久毛片 | 91久久人澡人人添人人爽欧美 | 麻豆视频免费在线观看 | 美女视频免费精品 | 成人毛片a| 又黄又爽又无遮挡免费的网站 | 欧美日韩不卡一区二区三区 | 国产精品国产三级国产专区53 | 日韩精品免费一区二区三区 | 中文字幕在线播放av | 97精品在线 | 在线播放 亚洲 | 夜夜操天天 | 国产精品久久久久久久免费观看 | 丝袜网站在线观看 | 96超碰在线 | 91久久久久久国产精品 | 精品国产乱码久久久久久1区2匹 | 天天爽网站 | 久久情网 | 日本黄色一级电影 | 国产精品久久久 | 午夜在线资源 | 国产精品久久久久久久久久久久久久 | 九九综合九九综合 | 亚洲视频精品 | 五月婷婷网站 | 亚洲激情校园春色 | 日韩欧美精品在线 | 久久超碰网 | 亚洲清纯国产 | 日韩久久久久久久久久久久 | a电影免费看 | 国产第一福利 | 国产精品久久久久久高潮 | 亚洲国产成人精品久久 | 成年人国产视频 | 高清av中文在线字幕观看1 | 天堂在线视频免费观看 | 福利一区在线视频 | 在线观看的黄色 | 午夜婷婷在线观看 | 9999精品视频 | 婷婷免费在线视频 | 亚洲乱码精品久久久 | 久久欧美精品 | 免费试看一区 | 99在线播放| 国产精品a久久久久 | 麻豆精品传媒视频 | 国产亚洲精品久久久久久大师 | 精品久久久久一区二区国产 | 精品国偷自产在线 | 最近中文字幕在线 | 日韩大片在线看 | 欧美a级在线播放 | 国产在线a不卡 | 欧美激情综合色综合啪啪五月 | 国产精品精 | 亚洲免费国产视频 | 久久精品亚洲一区二区三区观看模式 | 国产拍在线 | 久久久久亚洲国产 | 国产一级片久久 | 日韩激情视频在线 | 91精品综合在线观看 | 婷婷激情综合 | 免费a视频 | 天天色中文 | 国产真实精品久久二三区 | 97精品超碰一区二区三区 | 99热在线国产 | 99久久精品日本一区二区免费 | 国产精品高清在线 | 日韩免费一级a毛片在线播放一级 | 日韩理论视频 | 国产视频在线一区二区 | 久久在线电影 | 黄色三级免费片 | 天天操天天干天天综合网 | 久久久男人的天堂 | av电影免费在线 | 人人干网| 超碰99在线| 亚洲精品456在线播放第一页 | 中文字幕有码在线观看 | 狠狠做深爱婷婷综合一区 | 欧美巨大荫蒂茸毛毛人妖 | japanesexxxhd奶水 91在线精品一区二区 | 中文字幕免费国产精品 | 亚洲精品人人 | 亚洲欧美乱综合图片区小说区 | 亚洲国产高清在线观看视频 | 成年人视频在线免费播放 | 精品国产视频在线观看 | 一区 二区 精品 | 亚洲电影网站 | 91高清视频 | 成人黄色片免费 | 最近免费观看的电影完整版 | 久久草av | 亚洲一级片| 91自拍成人| 人人爱爱 | 91精品啪在线观看国产81旧版 | 国产精品福利在线 | 91av资源网 | 午夜精品电影一区二区在线 | 91人人网| 亚洲精品国产日韩 | 2021国产视频 | 免费手机黄色网址 | 深爱激情开心 | 五月天com | 狠狠色丁香婷婷综合 | 伊人丁香 | 97人人澡人人爽人人模亚洲 | 国产成人精品一区二区三区网站观看 | 探花视频免费观看 | 免费午夜在线视频 | 成人黄色中文字幕 | 国产成人精品一区二区三区福利 | 国产xx在线 | 五月婷婷黄色网 | 久久99久久久久久 | 日韩美女免费线视频 | 国产资源在线播放 | 九九欧美视频 | 日日摸日日添夜夜爽97 | 91免费网| 伊人电影天堂 | 精品uu | 又黄又刺激的网站 | 天堂在线成人 | 久久免费视频网 | 日日草天天干 | 久久激情视频免费观看 | 中文字幕在线观看视频一区二区三区 | 欧美日韩激情视频8区 | 日韩成人精品一区二区三区 | 五月天婷亚洲天综合网鲁鲁鲁 | 久久精品波多野结衣 | 日韩av免费在线电影 | 久久乱码卡一卡2卡三卡四 五月婷婷久 | 久久综合影音 | 四虎成人在线 | 国产高清在线看 | 91黄色免费看 | 欧美黑吊大战白妞欧美 | 99精品在线视频观看 | 国产成人一区二区在线观看 | 97超视频| 丁香婷婷久久久综合精品国产 | 一区 二区电影免费在线观看 | 日产乱码一二三区别免费 | 美女视频久久 | 亚洲视频观看 | av电影一区| 99久久精品无码一区二区毛片 | 国产又粗又猛又黄又爽 | 精品国产一区二区三区日日嗨 | 国产999| 久久免费观看少妇a级毛片 久久久久成人免费 | 国产精品小视频网站 | 国产精品 中文字幕 亚洲 欧美 | 欧美一级黄色网 | 中文在线免费一区三区 | 91亚洲精品久久久久图片蜜桃 | 久草视频在线资源站 | av在线网站免费观看 | 精品一区91| 五月婷婷激情六月 | 日批视频 | 超碰成人免费电影 | av中文字幕电影 | 激情电影在线观看 | 日韩综合第一页 | 国产亚洲精品久久久久5区 成人h电影在线观看 | 久久久精品欧美 | 天天看天天干天天操 | 欧美日韩中文在线视频 | 最新日韩视频在线观看 | 中文在线天堂资源 | 日本性生活免费看 | 五月开心综合 | 国产精品一区二区在线 | 亚洲一区视频免费观看 | 91九色网址 | 久久久久亚洲国产 | 日韩mv欧美mv国产精品 | 丁香导航| 99爱国产精品 | 日韩精品久久中文字幕 | 国产美腿白丝袜足在线av | 天堂素人在线 | 一区二区精品视频 | www视频免费在线观看 | 亚洲伊人婷婷 | 国产不卡精品 | 五月亚洲婷婷 | 97电影院在线观看 | 黄网站免费看 | 在线免费观看麻豆 | 精品亚洲国产视频 | 成年人在线观看网站 | 看片网站黄色 | 国产一区免费在线观看 | 久久精品国产精品 | 中文字幕在线观看免费高清完整版 | 国产在线精品一区二区 | 久久久久久久久久影院 | 天天干天天天天 | 日本一区二区不卡高清 | 99热最新精品 | 国产精品一区二区在线 | 四虎在线免费观看视频 | 欧美网站黄色 | 欧美人操人| 香蕉视频在线看 | 亚洲影院色 | 色综合天天视频在线观看 | av在线一二三区 | 国产精品国产三级国产aⅴ入口 | 国产精品1区| 免费在线观看91 | 午夜久久网站 | 999视频网 | 51久久夜色精品国产麻豆 | 夜夜躁日日躁狠狠久久88av | 婷婷丁香狠狠爱 | 国产免费视频在线 | 人人插人人看 | 色综合天天视频在线观看 | 91精品一区二区三区蜜臀 | 91在线看免费 | 91网免费看 | 2023av| 中文字幕日韩伦理 | 视频在线在亚洲 | 日韩在线免费视频 | 久久精品国产成人 | 中文字幕中文字幕在线中文字幕三区 | 欧美影片 | 国产二区视频在线观看 | 免费看三级黄色片 | 色wwww| 国产乱码精品一区二区三区介绍 | 国产视频一区二区在线观看 | 91 在线视频| 国产一级91| 欧美一区二区三区在线看 | 天天干夜夜 | 久久久麻豆视频 | 亚洲视频h | www久久久久 | 婷婷六月丁香激情 | 国产91亚洲精品 | 天堂av免费看 | 国产精品va在线观看入 | 97人人添人澡人人爽超碰动图 | a√天堂中文在线 | 欧美一区免费在线观看 | 久久精品久久久久电影 | 欧美黑吊大战白妞欧美 | 狠狠综合| 久久黄色免费视频 | 九九久久久久久久久激情 | 波多野结衣视频一区二区三区 | 国产成人一区二区三区影院在线 | 黄色网址a | 欧美有色 | h动漫中文字幕 | 四虎伊人| 国产一区高清在线 | 中文字幕精品一区久久久久 | 黄色精品久久久 | 午夜精品一区二区三区可下载 | 亚洲va综合va国产va中文 | 午夜av免费 | 亚洲精品电影在线 | 久久精品aaa | 国产中文字幕视频 | 中文av字幕在线观看 | 免费三级骚 | 欧美夫妻生活视频 | 亚洲成年人免费网站 | 国产一级视频在线免费观看 | 欧美日韩不卡一区二区三区 | 亚洲自拍av在线 | 久久大香线蕉app | 在线成人小视频 | 国产 日韩 欧美 中文 在线播放 | 黄色成年片 | 在线观看日韩免费视频 | 在线观看久久久久久 | 91精品国自产在线 | 成年人看片 | 久久国产视屏 | 深爱开心激情网 | 亚洲欧美在线综合 | 欧美日本不卡 | 97视频在线 | 成年人免费在线看 | 五月婷婷另类国产 | 精品久久中文 | 欧美激情视频久久 | 日韩欧美在线综合网 | 国产精品久久久久久久久久免费 | 国产爽妇网 | 99re久久资源最新地址 | 亚洲成人av在线电影 | 久久久国际精品 | 亚洲韩国一区二区三区 | 又爽又黄在线观看 | 久草在线视频首页 | 91tv国产成人福利 | 精品黄色视| 免费99精品国产自在在线 | 中文字幕在线成人 | 91精品视频网站 | 成人一区二区三区在线 | 精品国产视频在线观看 | 91精品一区国产高清在线gif | 97超碰伊人| 国产精品久久99综合免费观看尤物 | 成人黄色电影在线观看 | 在线观看国产日韩 | 五月婷丁香网 | 亚洲精品在线免费观看视频 | 亚洲精品中文字幕在线观看 | 婷婷精品国产欧美精品亚洲人人爽 | 久久影视网| 中文字幕亚洲精品在线观看 | 黄色成人毛片 | 操操操com | 成人在线观看你懂的 | 日韩在线电影一区 | 国产精品wwwwww| 亚洲精品一区二区三区在线观看 | 国产成人精品aaa | 精品久久久久久亚洲 | 久久免费毛片 | 久久久性 | 日韩欧美在线免费 | 色5月婷婷 | 99在线免费观看视频 | 最近中文字幕第一页 | 国产99久 | 免费视频18| 91av99| 国产一区av在线 | 黄色小网站在线 | 亚洲黄色高清 | 天天综合成人 | 狠狠插天天干 | 亚洲欧美久久 | 免费99精品国产自在在线 | 亚州欧美视频 | 亚洲精品国久久99热 | 六月丁香激情综合色啪小说 | 在线免费观看一区二区三区 | 久久99国产综合精品免费 | 亚洲国产理论片 | 久久久久久免费网 | 亚一亚二国产专区 | 黄色毛片在线看 | 国产精品一区二区三区在线免费观看 | 日韩国产欧美视频 | 亚洲成人av片在线观看 | 日韩精品一区二区三区在线视频 | 美女国内精品自产拍在线播放 | 黄色影院在线播放 | 视频在线99 | 88av视频 | 欧美综合在线视频 | a视频免费在线观看 | 久操久| 成人在线免费视频 | 中文字幕av全部资源www中文字幕在线观看 | 欧美综合色在线图区 | 日韩在线网址 | а天堂中文最新一区二区三区 | 国产我不卡 | 久久久亚洲国产精品麻豆综合天堂 | a在线免费 | 免费观看国产成人 | 久久桃花网 | 96精品高清视频在线观看软件特色 | 99久久日韩精品视频免费在线观看 | 91亚洲网站 | 中文字幕中文字幕在线中文字幕三区 | 久久婷五月 | 黄色动态图xx | 超碰av在线播放 | 黄色一级大片在线免费看产 | 亚洲成年人av | 国产无限资源在线观看 | 日韩理论在线视频 | 香蕉视频日本 | 99性视频| 九九热在线精品 | 91综合久久一区二区 | 在线天堂v| 五月天综合色 | 欧产日产国产69 | 色先锋资源网 | 操操操av| av在线一二三区 | 久久另类视频 | 亚洲精品在线国产 | 日韩av免费在线看 | 久久国产精品久久w女人spa | 中文字幕一区二区三区久久蜜桃 | 99c视频高清免费观看 | 日韩欧美精品在线观看视频 | 成人资源网 | 狠狠色噜噜狠狠狠狠2021天天 | av夜夜操| 国色天香av | 欧美大码xxxx | 日日夜夜骑 | 久草精品电影 | 国产日韩在线一区 | 久久成人午夜视频 | 91精品久久久久久 | 国产亚洲精品久久久久秋 | 一区av在线播放 | 玖玖视频精品 | 丝袜美腿在线播放 | 亚洲黄色一级电影 | 日韩在线在线 | 亚洲伊人天堂 | 日韩欧美一区二区在线播放 | 亚洲每日更新 | 国产精品福利一区 | av免费看看 | 欧美在线视频日韩 | 国产精品自在欧美一区 | 97成人资源站| 久久综合影音 | 久久综合狠狠 | 夜夜视频资源 | 99久久久久国产精品免费 | 亚洲一二三区精品 | 美女视频黄色免费 | 成年人在线 | 男女啪啪免费网站 | 成年人av在线播放 | av福利在线 | www.xxxx变态.com | 免费在线观看中文字幕 | 欧美性大战久久久久 | 伊人影院av| 欧美另类交人妖 | 涩av在线 | 天天插综合网 | 黄色av电影在线 | 人人插人人做 | 成人中文字幕+乱码+中文字幕 | 国产超碰97 | 亚洲人成免费网站 | 精品字幕在线 | 911免费视频 | 久久久免费观看视频 | 成人永久视频 | 日韩剧| 亚洲精品午夜久久久久久久久久久 | 视频精品一区二区三区 | 精品一二三区 | 日韩激情av在线 | 久久久久国产a免费观看rela | 日日成人网 | 五月天婷婷狠狠 | 夜夜操网站 | 国产精品99久久久久人中文网介绍 | 黄色av观看| 五月天六月婷婷 | 亚洲免费视频观看 | 免费电影播放 | 日本精品久久久久影院 | 亚洲一区日韩精品 | 2019天天干夜夜操 | 午夜神马福利 | 91网址在线看 | 日韩在线中文字幕 | 国产黄色特级片 | 久久国产网 | 三上悠亚一区二区在线观看 | 日日夜夜天天操 | 蜜臀av性久久久久蜜臀av | 国产99久久久国产精品 | 精品久久久久一区二区国产 | 久久理论片| 欧美日韩在线观看一区二区 | 成人一区二区在线观看 | 网站在线观看你们懂的 | 久久久影院一区二区三区 | 精品久久久精品 | 天天透天天插 | 亚洲热久久 | 欧美久久久久久久久久久久 | 97**国产露脸精品国产 | 国产视频精品久久 | 5月丁香婷婷综合 | 香蕉精品在线观看 | 日韩精品视频免费专区在线播放 | av动态图片 | 福利视频第一页 | 国产91免费观看 | 少妇18xxxx性xxxx片 | 999久久久久久久久6666 | 久久99精品久久久久蜜臀 | 亚洲国产手机在线 | 人人射人人爽 | 亚洲不卡在线 | 99久久精品免费看国产一区二区三区 | 日韩久久精品一区二区三区下载 | 狠狠网站 | 欧美孕交vivoestv另类 | 久久久精品二区 | 精品久久久亚洲 | 婷婷色婷婷 | 久久国产精品久久精品 | 一区二区精品视频 | 日韩亚洲国产中文字幕 | 亚洲视频久久久 | 国产精品精品久久久久久 | 欧美老人xxxx18 | 九色琪琪久久综合网天天 | 人人超碰免费 | 久久久国产在线视频 | 欧美视频日韩 | 成年人看片| 欧美福利久久 | 欧美一级高清片 | 色婷婷午夜| 五月婷婷亚洲 | 尤物九九久久国产精品的分类 | 国产不卡一二三区 | 欧美性超爽 | 一级片视频免费观看 | 超碰97国产精品人人cao | 国产精品一区免费在线观看 | 亚洲一区二区视频 | 日韩精品一区二区三区水蜜桃 | 日韩欧美精品一区二区 | 在线播放av网址 | 91精品欧美一区二区三区 | 久久99精品久久久久久清纯直播 | 最近高清中文字幕 | 成人国产精品免费观看 | 国产明星视频三级a三级点| 国产精品乱码久久久久 | 国产精品一级在线 | 日韩一区二区免费视频 | 精品亚洲成a人在线观看 | 亚洲欧美综合精品久久成人 | 久久不卡日韩美女 | 日韩无在线| 午夜婷婷在线播放 | 成人超碰在线 | 天天操天天摸天天爽 | 三级av小说 | 超碰国产在线播放 | 高清中文字幕 | 在线有码中文字幕 | 欧美疯狂性受xxxxx另类 | 亚洲综合色婷婷 | 久久婷婷亚洲 | 欧美性大胆 | 欧美日韩国产精品一区二区 | 手机av资源| av观看网站 | www.av在线.com| 狠狠操狠狠干天天操 | 99久久久国产精品美女 | 国产99久久久国产精品免费看 | 在线黄色观看 | 黄色三级免费观看 | 国产在线p| 狠狠操夜夜操 | 特级黄色一级 | 美女视频免费一区二区 | av官网在线 | 精品中文字幕在线 | 精品一区二区三区久久 | 91亚洲精品久久久中文字幕 | 欧美性猛片, | 可以免费观看的av片 | www成人精品 | 狠狠干天天干 | 免费成人av在线看 | 丁香六月婷婷综合 | 婷婷在线免费 | 少妇搡bbbb搡bbb搡忠贞 | 2022国产精品视频 | 亚洲国产大片 | 亚洲国产欧洲综合997久久, | 久久精品国产免费 | 精品国产自在精品国产精野外直播 | 亚洲精品在线资源 | 欧美日韩国产一区二 | 日韩丝袜在线观看 | 99精品国产福利在线观看免费 | 国产精品一区二区在线 | 欧美久久久久久久久久久久 | 久久另类小说 | 超碰大片 | 九色视频网址 | 国产精品一区二区三区99 | 在线观看中文av | 99热官网 | 国产aaa大片 | 成年人电影免费在线观看 | 永久免费的啪啪网站免费观看浪潮 | 天天干天天摸天天操 | 日韩av伦理片 | 欧美综合在线视频 | 国内精品久久久久久久久久久久 | 日韩免费在线看 | 亚洲女欲精品久久久久久久18 | 色综合久久久久久久久五月 | 99久久99久久免费精品蜜臀 | 九九99| 999久久久欧美日韩黑人 | 伊人婷婷色 | 久国产在线播放 | 国产 视频 久久 | 在线免费观看国产黄色 | 成人久久精品 | 色成人亚洲网 | 日本最新一区二区三区 | 免费看网站在线 | 中文字幕在线播放日韩 | 黄色免费在线视频 | 欧美在线观看视频一区二区 | 13日本xxxxxⅹxxx20 | 天天摸天天弄 | 久久tv| 精品国产午夜 | 亚洲天堂网在线观看视频 | 久久久久久国产精品免费 | 激情影音先锋 | 一级特黄av |