<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # Java 8 教程 > 原文: [https://howtodoinjava.com/java-8-tutorial/](https://howtodoinjava.com/java-8-tutorial/) 此 **Java 8 教程**列出了重要的 **Java 8 特性**,并提供了此發行版中引入的示例。 所有特性均具有指向詳細教程的鏈接,例如 lambda 表達式,Java 流,函數式接口和日期時間 API 更改。 **Java SE 8** 是[于 2014 年初發布的](https://blogs.oracle.com/thejavatutorials/jdk-8-is-released)。 在 Java 8 中,最受關注的特性是 lambda 表達式。 它還具有許多其他重要特性,例如默認方法,流 API 和新的日期/時間 API。 讓我們通過示例了解 Java 8 中的*這些新特性*。 ```java Table of Contents 1\. Lambda Expression 2\. Functional Interface 3\. Default Methods 4\. Streams 5\. Date/Time API Changes ``` ## 1\. Lambda 表達式 Lambda 表達式對于使用 Scala 等其他流行編程語言的我們很多人并不陌生。 在 Java 編程語言中,Lambda 表達式(或函數)只是*匿名函數*,即不帶名稱且不受標識符限制的函數。 它們準確地寫在需要的地方,通常以*作為其他函數*的參數。 Lambda 表達式的基本*語法為:* ```java either (parameters) -> expression or (parameters) -> { statements; } or () -> expression ``` 典型的 lambda 表達式示例如下所示: ```java (x, y) -> x + y //This function takes two parameters and return their sum. ``` 請注意,根據`x`和`y`的類型,方法可能會在多個地方使用。 參數可以匹配`int`或`Integer`或簡單地也可以匹配`String`。 根據上下文,它將添加兩個整數或連接兩個字符串。 #### 編寫 Lambda 表達式的規則 1. Lambda 表達式可以具有零個,一個或多個參數。 2. 參數的類型可以顯式聲明,也可以從上下文中推斷出來。 3. 多個參數用強制括號括起來,并用逗號分隔。 空括號用于表示空參數集。 4. 當有單個參數時,如果推斷出其類型,則不強制使用括號。 例如`a -> a * a`。 5. Lambda 表達式的主體可以包含零個,一個或多個語句。 6. 如果 lambda 表達式的主體具有單個語句,則不必使用大括號,并且匿名函數的返回類型與主體表達式的返回類型相同。 如果正文中的語句多于一個,則這些語句必須用大括號括起來。 > 閱讀更多: [Java 8 Lambda 表達式教程](//howtodoinjava.com/java8/complete-lambda-expressions-tutorial-in-java/) ## 2\. 函數式接口 函數式接口也稱為*單一抽象方法接口(SAM 接口)*。 顧名思義,它們**允許其中恰好是一種抽象方法**。 Java 8 引入了一個注解,即`@FunctionalInterface`,當您注解的接口違反函數式接口的約定時,該注解可用于編譯器級錯誤。 典型的函數式接口示例: ```java @FunctionalInterface public interface MyFirstFunctionalInterface { public void firstWork(); } ``` 請注意,即使省略`@FunctionalInterface`注釋,函數式接口也有效。 它僅用于通知編譯器在接口內部強制執行單個抽象方法。 另外,由于默認方法不是抽象的,因此*可以隨意向函數式接口添加任意數量的默認方法*。 要記住的另一個重要點是,如果接口聲明了一個覆蓋`java.lang.Object`的公共方法之一的抽象方法,那么該接口的任何實現都將具有`java.lang.Object`的實現,因此這也不會計入接口的抽象方法數量。 例如,下面是完全有效的函數式接口。 ```java @FunctionalInterface public interface MyFirstFunctionalInterface { public void firstWork(); @Override public String toString(); //Overridden from Object class @Override public boolean equals(Object obj); //Overridden from Object class } ``` > 閱讀更多: [Java 8 函數式接口教程](//howtodoinjava.com/java8/functional-interface-tutorial/) ## 3\. 默認方法 Java 8 允許您在接口中添加非抽象方法。 這些方法必須聲明為默認方法。 Java 8 中引入了默認方法以啟用 lambda 表達式的特性。 默認方法使您可以向庫的接口添加新特性,并確保與為這些接口的較早版本編寫的代碼二進制兼容。 讓我們看一個例子: ```java public interface Moveable { default void move(){ System.out.println("I am moving"); } } ``` `Moveable`接口定義了一種方法`move()`,并提供了默認實現。 如果有任何類實現了此接口,則無需實現其自己的`move()`方法版本。 它可以直接調用`instance.move()`。 例如: ```java public class Animal implements Moveable{ public static void main(String[] args){ Animal tiger = new Animal(); tiger.move(); } } Output: I am moving ``` 如果類愿意自定義`move()`方法的行為,則它可以提供自己的自定義實現并覆蓋該方法。 > 重做更多: [Java 8 默認方法教程](//howtodoinjava.com/java8/default-methods-in-java-8/) ## 4\. Java 8 流 引入的另一項重大更改是 **Java 8 流 API** ,它提供了一種以各種方式處理一組數據的機制,這些方式可以包括過濾,轉換或任何其他可能對應用程序有用的方式。 Java 8 中的 流 API 支持不同類型的迭代,您可以在其中簡單地定義要處理的項目集,對每個項目執行的操作,以及存儲這些操作的輸出。 流 API 的示例。 在此示例中,`items`是`String`值的集合,您想刪除以某些前綴文本開頭的條目。 ```java List<String> items; String prefix; List<String> filteredList = items.stream().filter(e -> (!e.startsWith(prefix))).collect(Collectors.toList()); ``` 這里`items.stream()`表示我們希望使用 流 API 處理`items`集合中的數據。 > 閱讀更多: [Java 8 內部和外部迭代](//howtodoinjava.com/java8/java-8-tutorial-internal-vs-external-iteration/) ## 5\. Java 8 日期/時間 API 更改 新的日期和時間 API /類(JSR-310),也稱為 *ThreeTen* ,它們僅改變了您在 Java 應用程序中處理日期的方式。 #### 日期 `Date`類甚至已過時。 打算替換`Date`類的新類是`LocalDate`,`LocalTime`和`LocalDateTime`。 1. `LocalDate`類表示日期。 沒有時間或時區的表示。 2. `LocalTime`類表示時間。 沒有日期或時區的表示。 3. `LocalDateTime`類表示日期時間。 沒有時區的表示。 如果您想將日期特性與區域信息一起使用,則 Lambda 會為您提供額外的 3 類,類似于上面的一種,即`OffsetDate`,`OffsetTime`和`OffsetDateTime`。 時區偏移可以以“`+05:30`”或“`Europe/Paris`”格式表示。 這是通過使用另一個類即`ZoneId`完成的。 ```java LocalDate localDate = LocalDate.now(); LocalTime localTime = LocalTime.of(12, 20); LocalDateTime localDateTime = LocalDateTime.now(); OffsetDateTime offsetDateTime = OffsetDateTime.now(); ZonedDateTime zonedDateTime = ZonedDateTime.now(ZoneId.of("Europe/Paris")); ``` #### 時間戳和持續時間 為了隨時表示特定的時間戳,需要使用的類是`Instant`。 `Instant`類表示精確到納秒的時間瞬間。 即時操作包括與另一個`Instant`進行比較,以及增加或減少持續時間。 ```java Instant instant = Instant.now(); Instant instant1 = instant.plus(Duration.ofMillis(5000)); Instant instant2 = instant.minus(Duration.ofMillis(5000)); Instant instant3 = instant.minusSeconds(10); ``` `Duration`類是用 Java 語言首次帶來的全新概念。 它表示兩個時間戳之間的差異。 ```java Duration duration = Duration.ofMillis(5000); duration = Duration.ofSeconds(60); duration = Duration.ofMinutes(10); ``` `Duration`處理較小的時間單位,例如毫秒,秒,分鐘和小時。 它們更適合與應用程序代碼進行交互。 要與人互動,您需要使**持續時間更長**,該類與`Period`類一起提供。 ```java Period period = Period.ofDays(6); period = Period.ofMonths(6); period = Period.between(LocalDate.now(), LocalDate.now().plusDays(60)); ``` > 閱讀更多: [Java 8 日期和時間 API 更改](//howtodoinjava.com/java8/date-and-time-api-changes-in-java-8-lambda/) 在注釋部分中,將您對此 **Java 8 教程**的問題留給我。 學習愉快!
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看