java匿名函數
A. java的匿名函數怎麼用
Java 應用程序按值傳遞參數(引用類型或基本類型),其實都是傳遞他們的一份拷貝.而不是數據本身.(不是像 C++ 中那樣對原始值進行操作。)
例1:
Java代碼
//在函數中傳遞基本數據類型,
public class Test {
public static void change(int i, int j) {
int temp = i;
i = j;
j = temp;
}
public static void main(String[] args) {
int a = 3;
int b = 4;
change(a, b);
System.out.println("a=" + a);
System.out.println("b=" + b);
}
}
結果為:
a=3
b=4
原因就是 參數中傳遞的是 基本類型 a 和 b 的拷貝,在函數中交換的也是那份拷貝的值 而不是數據本身;
例2:
Java代碼
//傳的是引用數據類型
public class Test {
public static void change(int[] counts) {
counts[0] = 6;
System.out.println(counts[0]);
}
public static void main(String[] args) {
int[] count = { 1, 2, 3, 4, 5 };
change(count);
}
}
在方法中 傳遞引用數據類型int數組,實際上傳遞的是其引用count的拷貝,他們都指向數組對象,在方法中可以改變數組對象的內容。即:對復制的引用所調用的方法更改的是同一個對象。
B. java lambda表達式是什麼
lambda表達式是JAVA8中提供的一種新的特性,它支持JAVA也能進行簡單的「函數式編程」。它是一個匿名函數,Lambda表達式基於數學中的λ演算得名,直接對應於其中的lambda抽象(lambda abstraction),是一個匿名函數,即沒有函數名的函數。
函數式介面:
這個是理解Lambda表達式的重點,也是產生lambda表達式的「母體」,這里我們引用一個比較容易理解的說法:函數式介面是 一個只有一個抽象方法(不包含object中的方法)的介面。
這個需要說明一點,就是在Java中任何一個對象都來自Object 所有介面中自然會繼承自Object中的方法,但在判斷是否是函數式介面的時候要排除Object中的方法。
C. Java 8的新特性lambda表達式是否比匿名內部類具有更好的可讀性
對於大多數剛剛接觸jdk8的同學來說,應該都會認為lambda表達式其實就是匿名內部類的語法糖(包括我自己,在剛剛接觸的時候,也是這樣認為的),但實際上二者還是存在不少差異,其中最主要的兩點就是標識性和作用域。
首先,內部類在創建表達式時,會確保創建一個擁有唯一標識的新對象,而對於lambda,其計算結果(其實就是一個映射的過程)可能有也可能沒有唯一標識,這取決於具體實現。
其次,內部類的聲明會創建出一個新的命名作用域,在這個作用域中,this與super指向內部類本身的當前實例;但是lambda恰恰相反,它不會引入任何新的命名環境,這樣就避免了內部類名稱查找的復雜性,名稱查找會導致很多問題,比如想要調用外圍實例的方法時卻錯誤的調用了內部類實例的Object方法。
D. JAVA 中的 -> 是什麼意思
import javax.swing.*;import java.awt.*;import java.io.File;
public class ImageViewer { public static void main(String[] args){
EventQueue.invokeLater(() -> {
JFrame frame = new ImageViewerFrame();
frame.setTitle("ImageViewer");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
});
}
}class ImageViewerFrame extends JFrame{ private JLabel label; private JFileChooser chooser; private static final int DEFAULT_WIDTH = 300; private static final int DEFAULT_HEIGHT = 400;
public ImageViewerFrame(){
setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
label = new JLabel();
add(label);
chooser = new JFileChooser();
chooser.setCurrentDirectory(new File("."));
JMenuBar menuBar = new JMenuBar();
setJMenuBar(menuBar);
JMenu menu = new JMenu();
menuBar.add(menu);
JMenuItem openItem = new JMenuItem("open");
menu.add(openItem);
openItem.addActionListener(Event -> { int result = chooser.showOpenDialog(null);
if (result == JFileChooser.APPROVE_OPTION){
String name = chooser.getSelectedFile().getPath();
label.setIcon(new ImageIcon(name));
}
});
JMenuItem exitItem = new JMenuItem("exit");
menu.add(exitItem);
exitItem.addActionListener(Event -> System.exit(0));
}
}
openItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { int result = chooser.showOpenDialog(null);
if (result == JFileChooser.APPROVE_OPTION){
String name = chooser.getSelectedFile().getPath();
label.setIcon(new ImageIcon(name));
}
}
});
E. java的lambda表達式是抄襲.net的嗎
就事論事,java使用跟。net一樣的lambda句法,說不抄襲是不可能的。這對開發人員來說是好事,對於同時從事java和.net的開發人員來說,不必去記錄兩套語法。
F. javalambda表達式 if怎麼表示
「Lambda 表達式」(lambda expression)是一個匿名函數,Lambda表達式基於數學中的λ演算得名,直接對應於其中的lambda抽象(lambda abstraction),是一個匿名函數,即沒有函數名的函數。Lambda表達式可以表示閉包(注意和數學傳統意義上的不同)。
我現在主要用來做一下循環啊,過濾啥的,語句少很方便。
G. java匿名函數必須要先繼承是什麼意思
Java 應用程序按值傳遞參數(引用類型或基本類型),其實都是傳遞他們的一份拷貝.而不是數據本身.(不是像 C++ 中那樣對原始值進行操作。)
例1:
Java代碼
//在函數中傳遞基本數據類型,
public class Test {
public static void change(int i, int j) {
int temp = i;
i = j;
j = temp;
}
public static void main(String[] args) {
int a = 3;
int b = 4;
change(a, b);
System.out.println("a=" + a);
System.out.println("b=" + b);
}
}
結果為:
a=3
b=4
原因就是 參數中傳遞的是 基本類型 a 和 b 的拷貝,在函數中交換的也是那份拷貝的值 而不是數據本身;
H. java中的lambda表達式是什麼
「Lambda
表達式」(lambda
expression)是一個匿名函數,Lambda表達式基於數學中的λ演算得名,直接對應於其中的lambda抽象(lambda
abstraction),是一個匿名函數,即沒有函數名的函數。Lambda表達式可以表示閉包(注意和數學傳統意義上的不同)。
我現在主要用來做一下循環啊,過濾啥的,語句少很方便。
I. 函數表達式是什麼
函數表達式是作為表達式語句的一部分存在;當它沒有函數名稱的時侯,則稱為匿名函數;匿名函數:function (參數) {函數體}匿名函數屬於函數表達式。
函數表達式與函數聲明的區別是:函數表達式必須等到Javascirtp引擎執行到它所在行時,才會從上而下一行一行地解析函數表達式,所以,調用它的語句不可以放在它之前。
定義函數的方式有三種:
1、函數聲明: function 函數名稱 (參數:可選) { 函數體 }。
2、函數表達式: varexpress= function 函數名稱:可選 (參數:可選) { 函數體 }。
3、構造函數: var fun =new Function(參數:可選)。
最常用的是函數聲明和函數表達式。