1. 程式人生 > 實用技巧 >函數語言程式設計思想,lambda表示式,File類

函數語言程式設計思想,lambda表示式,File類

函數語言程式設計思想

  強調的是做什麼,而不是以什麼樣的方式來做,它忽略了面向物件的複雜語法,只要能夠獲取到結果,誰娶做的,怎麼做的,都不重要,重要的是結果,不重視過程.

冗餘的Runnable程式碼

傳統的寫法
public class Demo01Runnable {
    public static void main(String[] args) {
        // 匿名內部類的方式
        new Thread(new Runnable() {
            @Override
            public void run(){
                System.out.println(
"開啟了一個新的執行緒任務"); } }).start();// 啟動新執行緒 } }

程式碼分析:

對於Runnable的匿名內部類用法,可以分析出一下內容:

  • Thread類需要Runnable介面作為引數,其中抽象方法run用來指定執行緒任務內容的核心。

  • 為了指定run方法的方法體,不得不需要Runnable介面的實現類

  • 為了省去定義一個RunnableImpl實現類的麻煩,不得不使用匿名內部類。

  • 必須重寫抽象方法run方法,所以方法的名稱、方法的引數、方法的返回值不得不在寫一遍,且不能寫錯。

  • 從這裡面可以,只有方法體才是執行緒任務的關鍵性內容

程式設計思想的轉換

做什麼,而不是怎麼做

我們真正希望做的事情是:將run方法體內的程式碼傳遞給Thread類知曉能夠載入到即可。

傳遞一段程式碼---這是我們真正的目的。

我們需要將程式關注的重點從怎麼做迴歸到做什麼的本質上,過程與形式並不重要。

2014年3月Oracle官方所釋出的Java 8(JDK1.8)中,加入了Lambda表示式

Lambda的語法:

() -> System.out.println("...")
  • 前面的一對小括號即run方法,引數為無,裡面是空的,此時需要任何的條件

  • 中間的一個箭頭代表將前面的引數傳遞給後面的程式碼

  • 後面的輸出語句即業務邏輯程式碼(執行緒任務內容)

Lambda的標準格式

格式由三個部分組成:

  • 一些引數

  • 一個箭頭

  • 一段程式碼

Lambda表示式的標準格式:

(引數型別1 引數名稱1,引數型別2 引數名稱2,....) -> {程式碼語句}

格式說明:

  • 小括號內的語法與傳統的方法引數列表一致,無引數就留空,多個引數則用逗號隔開

  • ->是新引入的語法格式,代表指向的動作

  • 大括號內的語法與傳統方法體要求基本一致。

Lambda省略格式

可推導即可省略

Lambda強調的是“做什麼”,而不是“怎麼做”,所以凡是可以根據上下文推導得知的資訊,都可以省略。比如:

invokeSum(3.14, 3.15, (double d1,double d2) -> {
               return  d1 + d2;
        });
// 省略格式表達
invokeSum(3.14,3.15,(d1,d2) -> d1 + d2);

省略的規則:

在Lambda標準格式的表示式的基礎上,使用省略寫法的規則是:

  1. 小括號內參數的型別可以省略。

  2. 如果小括號內有且僅有一個引數,則小括號也可以省略

  3. 如果大括號內有且僅有一個語句,則無論是否有返回值,都可以省略大括號、return關鍵字和語句的分號。

Lambda的使用前提

Lambda的語法非常的簡潔,使用非常的簡單,但是有以下注意事項:

  1. 使用Lambda必須具有介面,且要求介面中有且僅有一個抽象方法

    無論JDK內建的Runnable、Comparator介面還是自定義的介面,只有當介面中的抽象方法存在且唯一,才可以使用Lambda

  2. 使用Lambda必須具有上下文推斷

    也就是方法的引數或者區域性變數型別必須為Lambda對應的介面型別,才能使用Lambda作為該介面的例項。

備註:有且僅有一個抽象方法的介面,稱為函式式介面

File類

概述

java.io.File類是檔案和目錄路徑名的抽象表示。主要用於檔案和目錄的建立、查詢、刪除等操作。

Java把電腦中的檔案和資料夾(目錄)封裝為了一個File類,我們可以使用File類對檔案和資料夾進行操作。

可以使用File類的方法:

  • 建立一個檔案、資料夾

  • 刪除一個檔案、資料夾

  • 獲取一個檔案、資料夾

  • 判斷檔案、資料夾是否存在

  • 對資料夾進行遍歷

  • 獲取檔案的大小

File類是一個與系統無關的類,任何的作業系統都可以使用這個類中的方法。

構造方法
  • public File(String pathname):通過將給定路徑名字串轉換為抽象路徑名來建立一個新 File 例項。

  • public File(String parent,String child):根據 parent 路徑名字串和 child 路徑名字串建立一個新 File 例項。

  • public File(File parent,String child):根據 parent 抽象路徑名和 child 路徑名字串建立一個新 File 例項。

程式碼示例:

常用API方法

  • 獲取功能的方法

  • 判斷功能的方法

  • 路徑功能的方法

  • 建立刪除功能的方法

  • 目錄遍歷功能的方法

獲取功能的方法
  • public String getAbsolutePath():返回此抽象路徑名的絕對路徑名字串。

  • public String getPath():將此File轉換為路徑名字串

  • public String getName():返回由此File表示的檔案或目錄的名稱。

  • public long length():返回此File表示的檔案的長度。

判斷功能的方法
  • public boolean exists():判斷File表示的檔案或者資料夾是否實際存在

  • public boolean isDirectory():判斷此File表示的資料夾是否存在

  • public boolean isFile():判斷此File表示的檔案是否存在

建立和刪除檔案的方法
  • public boolean createNewFile():當且僅當具有該名稱的檔案不存在時,建立一個新的空的檔案,返回值是true

  • public boolean delete():刪除由此File表示的檔案或者目錄

  • public boolean mkdir():建立由此File表示的資料夾

  • public boolean mkdirs():建立由此File表示的資料夾,包括任何必須但是又不存在的父目錄。

目錄的遍歷
  • public String[] list():返回一個String陣列,表示該File目錄中的所有的子目錄或者子檔案。

  • public File[] listFile():返回一個File陣列,表示該File目錄中的所有的子目錄或者子檔案。