【java】Java中-> 是什么意思?
JAVA 什么 意思
2023-09-14 09:05:05 时间
先看一个例子
EventQueue.invokeLater(() -> {
JFrame frame = new ImageViewerFrame();
frame.setTitle("ImageViewer");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
});
// 上面那一段可以看成如下:
EventQueue.invokeLater(new Runnable() {
public void run() {
JFrame frame = new ImageViewerFrame();
frame.setTitle("ImageViewer");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
openItem.addActionListener(Event -> {
int result = chooser.showOpenDialog(null);
if (result == JFileChooser.APPROVE_OPTION){
String name = chooser.getSelectedFile().getPath();
label.setIcon(new ImageIcon(name));
}
});
// 我们可以将lambda表达式转成匿名内部类的样子
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));
}
}
});
再看一个例子
在《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));
}
}
可以看到两处这样的代码
() -> {
JFrame frame = new ImageViewerFrame();
frame.setTitle("ImageViewer");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
Event -> {
int result = chooser.showOpenDialog(null);
if (result == JFileChooser.APPROVE_OPTION){
String name = chooser.getSelectedFile().getPath();
label.setIcon(new ImageIcon(name));
}
Java8的lambda表达式。就是匿名函数。
上面那一段可以看成如下:
EventQueue.invokeLater(new Runnable() {
public void run() {
JFrame frame = new ImageViewerFrame();
frame.setTitle("ImageViewer");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
下面一段可以看成:
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));
}
}
});
只不过java自动帮你翻译了一下
Java8 特性:
-
在接口中新增了default方法和static方法,这两种方法可以有方法体 (*default方法可以被子接口继承亦可被其实现类所调用,default方法被继承时,可以被子接口覆写;接口中的static方法不能被继承,也不能被实现类调用,只能被自身调用)
-
Lambda表达式(可以看成是匿名内部类,->表示连接符;{}内部是方法体;<实例>::<实例方法名>返回函数式接口,例如Collections::sort)
-
函数式接口(如果一个接口只有一个抽象方法)可以使用Lambda表达式,lambda表达式会被匹配到这个抽象方法上
-
Lambda作用域(可以直接访问标记了final的外层局部变量,实例的字段以及静态变量,lambda内部对于实例的字段以及静态变量是即可读又可写)
-
访问接口的方法:Predicate接口(有一个参数并且返回一个结果,并附带了一些可以和其他函数组合的默认方法);Comparator 在Java 8在此之上添加了多种默认方法
-
Optional 接口(防止NullPointerException异常的辅助类型)
-
Date api(Clock类提供了访问当前日期和时间的方法,Clock是时区敏感的,可以用来取代 System.currentTimeMillis() 来获取当前的微秒数;LocalTime 本地时间类LocalDate 本地日期类 )
-
Annotation 注解,8中支持多重注解了
相关文章
- Java内存模型FAQ(五)旧的内存模型有什么问题?
- (翻译)什么是Java的永久代(PermGen)内存泄漏
- Java实现 LeetCode 802 找到最终的安全状态 (DFS)
- Java实现 LeetCode 21 合并两个有序链表
- java计算时间从什么时候开始 为什么从1970年开始 java的时间为什么是一大串数字...
- java类加载器是什么?
- java类加载器是什么?
- java实现祖冲之割圆法
- java实现拉丁方块填数字
- Java实现堆排序问题(变治法)
- Java基本概念(2)J2EE里面的2是什么意思
- Java与.NET兼容的RSA密钥持久化方法
- [Java Sprint] AutoWire
- 面向切面编程AOP[三](java AnnotationAwareAspectJAutoProxyCreator实现了什么功能)
- Java中String直接赋字符串和new String的区别 如String str=new String("a")和String str = "a"有什么区别?
- Atitit 通过调用gui接口杀掉360杀毒 360卫士 qq保镖等难以结束的进程(javac# php )
- Atitit.软件开发概念(11)--网络子系统--url编码 空格问题URLEncoder java js php
- 【jvm优化】top命令找到占用CPU最高的java线程
- 《Java程序猿面试笔试宝典》之字符串创建与存储的机制是什么
- java类成员的默认可访问性是什么?你猜
- java 2和java有什么区别
- 什么是java REST与RESTFUL
- 学习Java,该看什么书?
- Java千百问局部变量、类变量、实例变量有什么区别