1.普通的寫法:
public
static
void
main(string args)
--------------------------------------------
//引數底層使用的都加了final修飾
public
static
void
printhello(string name,int count)
system.out.println(this);//列印內部類物件的位址,這個this代表是內部類的this,因為這個是靜態方法,外部類物件不存在
}}).start();
}-------------------------------------------
輸出結果:
0helloword!
1helloword!
2helloword!
3helloword!
4helloword!
lambada.testlambda$1@2980e8cb //這個是內部類
2.反編譯上面printhello()方法:
//引數底層使用的都加了final修飾
public
static
void
printhello(final string name, final
int count)
})).start();
}
反編譯printhello()方法,可以知道:
1.printhello()的引數底層使用的都加了final修飾
2.在printhello()中定義的變數也加了final修飾
3.this是指向,內部類的this
2.lambda表示式的寫法:
public
static
void
main(string args)
---------------------------------------------
//引數的在底層被fianl修飾,所以可以在lambda表示式中可以直接使用該自由變數
public
void
printhello(string name,int count)
system.out.println(this);//這個this不是內部類的this,而是外部類的this
}).start();
}-------------------------------------------
輸出結果:
0helloword!
1helloword!
2helloword!
lambada.testlambda@663a8ec8 //這個是外部類
從列印的結果可以知道:
1.printhello()的引數底層使用的都加了final修飾
2.在printhello()中定義的變數也加了final修飾
3.在lambda中的this是指向,建立lambda表示式的方法中的this,而不是內部類的this
1.引數//例如:表示式中的(user o1,user o2)引數
2.區域性變數//例如:方法中定義的變數
3.自由變數(不是引數也不是區域性變數)//例如:方法中的引數
總結:
結論:
1.lambda表示式中的自由變數會被儲存,無論什麼時候執行lambda表示式,都可以直接使用;
2.自由變數在lambda表示式中是不能修改的,因為自由變數是被final修飾
3.引數和區域性變數的使用方式和普通的使用方式相同;
4.lambda表示式中的this指向,建立lambda表示式的方法中的this,而不是內部類的this
java8新特性之一lambda
lambda結合函式式介面使用,函式式介面 functional inte ce 就是乙個有且僅有乙個抽象方法,但是可以有多個非抽象方法的介面。1 可選型別宣告 不需要宣告引數型別,即直接可以寫引數,不需要宣告型別,編譯器可以自動識別型別 2 可選的引數圓括號 乙個引數可以不要圓括號,多個引數需要圓...
java8新特性之lambda表示式
lambda表示式需要支援函式式介面 介面中只有乙個抽象方法的介面 可以用 functionalinte ce註解修飾介面,這樣如果定義超過乙個抽象方法就會報錯 幾種格式 格式一 無引數,無返回值 system.out.println hello 格式二 有乙個引數,無返回值 x system.ou...
Java8新特性 Lambda表示式
lambda表示式的本質只是乙個語法糖,由編譯器推斷並幫你轉換包裝為常規的 因此你可以使用更少的 來實現同樣的功能。基本語法 parameters expression parameters 簡單例子 僅用三行 完成 排序後輸出列表 public static void main string ar...