
Java 教程
- Java - 首頁
- Java - 概述
- Java - 歷史
- Java - 特性
- Java 與 C++
- JVM - Java 虛擬機器
- Java - JDK 與 JRE 與 JVM
- Java - Hello World 程式
- Java - 環境設定
- Java - 基本語法
- Java - 變數型別
- Java - 資料型別
- Java - 型別轉換
- Java - Unicode 系統
- Java - 基本運算子
- Java - 註釋
- Java - 使用者輸入
- Java - 日期和時間
Java 控制語句
- Java - 迴圈控制
- Java - 決策制定
- Java - If-else
- Java - Switch
- Java - For 迴圈
- Java - For-Each 迴圈
- Java - While 迴圈
- Java - do-while 迴圈
- Java - Break
- Java - Continue
面向物件程式設計
- Java - OOPs 概念
- Java - 物件和類
- Java - 類屬性
- Java - 類方法
- Java - 方法
- Java - 變數作用域
- Java - 建構函式
- Java - 訪問修飾符
- Java - 繼承
- Java - 聚合
- Java - 多型
- Java - 重寫
- Java - 方法過載
- Java - 動態繫結
- Java - 靜態繫結
- Java - 例項初始化塊
- Java - 抽象
- Java - 封裝
- Java - 介面
- Java - 包
- Java - 內部類
- Java - 靜態類
- Java - 匿名類
- Java - 單例類
- Java - 包裝類
- Java - 列舉
- Java - 列舉建構函式
- Java - 列舉字串
Java 內建類
Java 檔案處理
Java 錯誤和異常
- Java - 異常
- Java - try-catch 塊
- Java - try-with-resources
- Java - 多重 catch 塊
- Java - 巢狀 try 塊
- Java - Finally 塊
- Java - throw 異常
- Java - 異常傳播
- Java - 內建異常
- Java - 自定義異常
Java 多執行緒
- Java - 多執行緒
- Java - 執行緒生命週期
- Java - 建立執行緒
- Java - 啟動執行緒
- Java - 執行緒連線
- Java - 執行緒命名
- Java - 執行緒排程器
- Java - 執行緒池
- Java - 主執行緒
- Java - 執行緒優先順序
- Java - 守護執行緒
- Java - 執行緒組
- Java - 關閉鉤子
Java 同步
Java 網路
- Java - 網路
- Java - 套接字程式設計
- Java - URL 處理
- Java - URL 類
- Java - URLConnection 類
- Java - HttpURLConnection 類
- Java - Socket 類
- Java - 泛型
Java 集合
Java 介面
Java 資料結構
Java 集合演算法
高階 Java
- Java - 命令列引數
- Java - Lambda 表示式
- Java - 傳送電子郵件
- Java - Applet 基礎
- Java - Javadoc 註釋
- Java - 自動裝箱和拆箱
- Java - 檔案不匹配方法
- Java - REPL (JShell)
- Java - 多版本 Jar 檔案
- Java - 私有介面方法
- Java - 內部類菱形運算子
- Java - 多解析度影像 API
- Java - 集合工廠方法
- Java - 模組系統
- Java - Nashorn JavaScript
- Java - Optional 類
- Java - 方法引用
- Java - 函式式介面
- Java - 預設方法
- Java - Base64 編碼解碼
- Java - Switch 表示式
- Java - Teeing 收集器
- Java - 微基準測試
- Java - 文字塊
- Java - 動態 CDS 歸檔
- Java - Z 垃圾收集器 (ZGC)
- Java - 空指標異常
- Java - 打包工具
- Java - 密封類
- Java - 記錄類
- Java - 隱藏類
- Java - 模式匹配
- Java - 緊湊數字格式化
- Java - 垃圾回收
- Java - JIT 編譯器
Java 雜項
- Java - 遞迴
- Java - 正則表示式
- Java - 序列化
- Java - 字串
- Java - Process API 改進
- Java - Stream API 改進
- Java - 增強型 @Deprecated 註釋
- Java - CompletableFuture API 改進
- Java - 流
- Java - Datetime Api
- Java 8 - 新特性
- Java 9 - 新特性
- Java 10 - 新特性
- Java 11 - 新特性
- Java 12 - 新特性
- Java 13 - 新特性
- Java 14 - 新特性
- Java 15 - 新特性
- Java 16 - 新特性
Java API 和框架
Java 類引用
- Java - Scanner
- Java - 陣列
- Java - 字串
- Java - Date
- Java - ArrayList
- Java - Vector
- Java - Stack
- Java - PriorityQueue
- Java - LinkedList
- Java - ArrayDeque
- Java - HashMap
- Java - LinkedHashMap
- Java - WeakHashMap
- Java - EnumMap
- Java - TreeMap
- Java - IdentityHashMap
- Java - HashSet
- Java - EnumSet
- Java - LinkedHashSet
- Java - TreeSet
- Java - BitSet
- Java - Dictionary
- Java - Hashtable
- Java - Properties
- Java - Collection
- Java - Array
Java 有用資源
Java - 方法引用
方法引用是在 Java 8 中引入的。方法引用是 lambda 表示式 的一種特殊型別。它透過提高可讀性和編寫簡潔的程式碼來滿足 lambda 表示式的目的。
方法引用適用於 函式式介面。無論何時,我們都使用 lambda 表示式呼叫函式式介面的方法,都可以使用方法引用。
方法引用有助於透過名稱指向方法,即使不指定引數。引數由 lambda 表示式傳遞。方法引用使用 "::" 符號描述。
Java 方法引用的型別
方法引用可以用於指向以下型別的方法:
靜態方法
例項方法
使用 new 運算子的建構函式 (TreeSet::new)
靜態方法的方法引用
靜態 方法 可以輕鬆地使用 "::" 符號引用,而無需建立 類 的任何例項,並使用類名。
語法
<<class-name>>::methodName
示例:靜態方法的引用
在此示例中,我們引用了我們類的靜態方法以三種方式列印元素。第一種方法是使用 for 迴圈 列印元素的常規方法。第二種方法是在 for each 迴圈 中使用 lambda 表示式。第三種方法是在 for each 迴圈中使用方法引用來列印所有元素。
package com.tutorialspoint; import java.util.ArrayList; import java.util.List; public class Tester { public static void main(String args[]) { List<String> names = new ArrayList<>(); names.add("Mahesh"); names.add("Suresh"); names.add("Ramesh"); names.add("Naresh"); names.add("Kalpesh"); System.out.println("Printing using for each loop"); // Approach 1: for loop to print all elements for (String name: names) { System.out.println(name); } System.out.println("Printing using for each loop with lambda expression"); // Approach 2: lambda expression to print the elements in for each loop names.forEach(s->System.out.println(s)); System.out.println("Printing using for each loop with method reference" ); // Approach 3: Method reference to print elements in for each loop names.forEach(System.out::println); } }
輸出
讓我們編譯並執行上述程式,這將產生以下結果:
Printing using for each loop Mahesh Suresh Ramesh Naresh Kalpesh Printing using for each loop with lambda expression Mahesh Suresh Ramesh Naresh Kalpesh Printing using for each loop with method reference Mahesh Suresh Ramesh Naresh Kalpesh
例項方法的方法引用
與靜態方法類似,我們可以使用方法引用引用物件的例項方法。
語法
<<object-name>>::methodName
示例:例項方法的引用
在此示例中,我們引用了 Integer 類的例項方法來比較元素,方法有兩種。第一種方法是使用帶有具有顯式方法呼叫的 lambda 表示式的 sorted 方法來常規比較元素。第二種方法是使用方法引用。
package com.tutorialspoint; import java.util.Arrays; import java.util.List; public class Tester { public static void main(String args[]) { List<Integer> numbers = Arrays.asList(1,2,4,9,8,7,3); System.out.println("Sorted using lambda expression"); numbers = numbers.stream().sorted((a,b) -> a.compareTo(b)).toList(); System.out.println(numbers); numbers = Arrays.asList(1,2,4,9,8,7,3); System.out.println("Sorted using method reference" ); numbers = numbers.stream().sorted(Integer::compareTo).toList(); System.out.println(numbers); } }
輸出
讓我們編譯並執行上述程式,這將產生以下結果:
Sorted using lambda expression [1, 2, 3, 4, 7, 8, 9] Sorted using method reference [1, 2, 3, 4, 7, 8, 9]
建構函式的方法引用
我們也可以使用方法引用來呼叫建構函式。這類似於靜態方法呼叫,但這裡我們使用 new 而不是方法名。
語法
<<class-name>>::new
示例:建構函式的引用
在此示例中,我們在迭代學生姓名列表時,根據學生的姓名建立 Student 類的新的物件。
package com.tutorialspoint; import java.util.Arrays; import java.util.List; public class Tester { public static void main(String args[]) { List<String> studentNames = Arrays.asList("Mahesh","Suresh","Ramesh","Robert","Jon"); // create the list of student objects from names Student[] students = studentNames.stream().map(Student::new).toArray(Student[]::new); List<String> list = Arrays.asList(students); System.out.println(list); } } class Student{ String name; Student(String name){ this.name = name; } public String toString(){ return this.name; } }
輸出
讓我們編譯並執行上述程式,這將產生以下結果:
[Mahesh, Suresh, Ramesh, Robert, Jon]
廣告