Java學習日記14——Lambda表達式以及一些高階語法

2020-08-10 12:17:30

Java學習日記14——Lambda表達式(λ表達式)以及一些高階語法

Lambda表達式的基本寫法

Java1.8以後纔有的。

(參數) -> (結果)
//例如:
(String s) -> s.length();
x -> x*x;
() ->{System.out.println("aaa");}

在Java中的Lambda表達式,大體相當於其他語言的匿名函數或者指針函數。然而在Java中,則可以認爲是匿名類的一個範例。至於匿名類,在前面已經簡單陳述過了。
舉一個簡單的例子:

Runnable dolt=new Runnable(){
	public void run()
	{
		System.out.println("普通寫法");
	}
}
new Thread(doit).start();//執行緒
//////////////////////////////////////////////////////////////////////////////////////////////
Runnable doit = () ->{System.out.println("Lambda 寫法");}//只有一句,也可以不寫花括號
new Thread(doit).start();//執行緒
//////////////////////////////////////////////////////////////////////////////////////////////
new Thread(()->{System.out.println("Lambda+執行緒 寫法");}).start();

Lambda表達式大大的簡化了書寫,可用於執行緒、數學計算、按鈕事件處理等等。由於Lambda只能表示一個函數,所以能寫成Lambda的介面要求包含最多隻能一個抽象函數。可以將Lambda表達式將程式碼當成數據來處理。

包裝類

主要是將基本型別的包裝成參照型別(object),例如int->Interger
共有8類:
Boolean,Byte,Short,Character,Integer,Long,Float,Double

Integer i = new Integer(10);

裝箱與拆箱

裝箱 : Integer I = 10;
拆箱 : int i = I;

列舉

列舉是一種特殊的class型別,在簡單情況下,用法與其他語言的enum基本一致。

enum Light{Red,Yellow,Green};

可以在enum中新增欄位、方法、構造方法等。

註解

這裏的註解又稱爲註記、標記、標註等,不等於註釋,在各種語法要素上加上附加資訊,供編譯器或其他程式使用,所有的註解都是java.lang.annotation.Annotation的自子類。
例如:

@Override//表示覆蓋父類別方法
@Deprecated//表示過時的方法,會產生警告
@SuppressWarnings//編譯不產生警告

自定義註解:比較複雜比較少用,下面 下麪給一個小小例子

public @interface Author{
	String name();
}

參照與指針

Java中是沒有指針的,但是參照(new一個新物件,對物件就行操作)實際就是指針,但是相比較於C語言,Java中的參照是受控制的安全的,比如:
 1.會檢查真空指引;
 2.沒有指針運算;
 3.不能存取沒有參照的記憶體;
 4.自動回收垃圾;

相等於不等

基本數據型別的相等
數值型別:轉換後比較
浮點數,一般不使用==進行比較
Double.NaN = = Double.NAN結果爲false
Boolean型數據無法與int相比較。
一些特例:

Integer i = new Integer(10);
Integer j = new Integer(10);
System.out.println(i==j);
//輸出是false,因爲這裏是兩個物件。
Integer m = 10;
Integer n = 10;
System.out.println(m==n);
//輸出是true,因爲利用了包裝,-128~127之間的數有快取
Integer p = 200;
Integer q = 200;
System.out.println(p==q);
//輸出是false,超過快取區域大小

執行結果爲:

false
true
false

String物件的特殊性,判斷相等時,不要使用==。而是使用equals。

String hello = "Hello",hel = "Hel",lo = "lo";
System.out.println(hello == ("Hel"+"lo"));//true
System.out.println(hello == ("Hel"+lo));//false
System.out.println(hello == new String("Hello"));//flase,新的物件String
System.out.println(hello == ("Hel"+lo).intern());//true

如果你對Java有興趣,可以瞭解一下前面幾期的基礎知識!下面 下麪附上鍊接:

Java程式設計基礎認知:Java學習日記1——基礎認知
Java物件導向程式設計認識:Java學習日記2——物件導向程式設計認知
Java程式的基本結構認識:Java學習日記3——程式型別與構成認知
Java的輸入輸出方法總結:Java學習日記4——Java輸入輸出方法總結
Java的數據型別、變數、常數、運算子:Java學習日記5——數據型別、變數、常數、運算子、陣列
Java學習日記6——類、欄位、方法、this的使用:Java學習日記6——類、欄位、方法、this的使用
Java學習日記7——類的繼承、super使用規則:Java學習日記7——類的繼承、super使用規則
Java學習日記8——修飾符:Java學習日記8——public、static、private、final、abstract、protected
Java學習日記9——介面(長文預警):Java學習日記9——介面(長文預警)
Java學習日記10——Java中的變數及其傳遞:Java學習日記10——Java中的變數及其傳遞
Java學習日記11——多型和虛方法呼叫:Java學習日記11——多型和虛方法呼叫
Java學習日記12——構造方法及其初始化、構造方法的執行過程——Java學習日記12——構造方法及其初始化、構造方法的執行過程
Java學習日記13——內部類和匿名類、以及垃圾回收機制 機製——Java學習日記13——內部類和匿名類、以及垃圾回收機制 機製